Как я могу получить ограничивающий прямоугольник для данного прямоугольника в ZBar?
В настоящее время я рассчитываю это из расположение полигона используя этот код:
for(Image::SymbolIterator symbol = image.symbol_begin(); symbol != image.symbol_end(); ++symbol) {
int pointsCount = symbol->get_location_size();
for (int ii = 0; ii < pointsCount; ++ii) {
int x = symbol->get_location_x(ii);
int y = symbol->get_location_y(ii);
if (!ii) {
r.left = r.right = x;
r.top = r.bottom = y;
}
r.left = std::min(r.left, x);
r.right = std::max(r.right, x);
r.top = std::min(r.top, y);
r.bottom = std::max(r.bottom, y);
}
printf("rect(%d,%d,%d,%d), ", r.left, r.top, r.right, r.bottom);
}
Это хорошо работает для некоторых штрих-кодов, но у меня есть одно конкретное изображение, где ZBar правильно распознает текст штрих-кода — это «CHECK» — но возвращает 10 точек в качестве полигона местоположения которые все лежат на правом углу штрих-кода.
Вот как это выглядит визуально (я нарисовал точки в виде кругов):
Так я что-то здесь не так делаю? Как правильно рассчитать ограничивающую рамку штрих-кода?
Ссылка на документацию в вашем посте гласит: «В настоящее время это не полигон, а места сканирования, где был декодирован символ». Смотря на один из их примеров изображений, это похоже на ваш случай — кажется, что это вовсе не граница, а скорее набор точек, связанных с местоположением, в котором алгоритм извлечения определил, что символ был успешно декодирован. Из документации кажется, что вам не повезло, поскольку нет других функций для получения геометрических данных.
Хотя ваш вопрос SO не привел к каким-либо полезным ответам, вы можете попробовать ссылки поддержки на их сайте.
Других решений пока нет …