Russian Qt Forum
Ноябрь 22, 2024, 23:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Определение границ прямоугольной област  (Прочитано 6856 раз)
SunbeamRider
Гость
« : Декабрь 17, 2014, 10:44 »

Привет. В общем задача у меня  такая стоит: Есть куча отсканированных изображений (.JPG) некоего куска бумаги, предположим это какая нибудь этикетка или билетик, причем прямоугольная. отсканирована неровно ( то бишь стороны не параллельны сторонам монитора ), и задача моей проги состоит в том чтобы выравнивать эти изображения и затем обрезать строго по границе картинки. В рукопашную это сделать не составило труда, я использовал фреймворк QGraphics, кинул на сцену изображение, сделал инструменты автоматического поворота, ( но при этом пользователь должен сам определить границу этикетки и провести линию вдоль нее ) и после поворота обрезать не сложно. И вот подошел момент когда нужно все это автоматизировать, то есть программно определять границы этого клятого билетика(этикетки), поворачивать его и выделять область обрезания. Проблема состоит в том, что границы (и сама картинка)отнюдь не однородные, и даже не четкие. У меня вертелись какие то мысли насчсет таблицы цветов, получения количественного показателя каждого цвета, усреднения этого значения и тп. Но до конкретного чего то дойти не выходит, плюс к тому не очень хорошо знаком с инструментами библиотеки. Вот собственно и вопрос: возможно у кого то был опыт с задачами такого рода или есть мысли по реализации алгоритма, буду безмерно благодарен. 
« Последнее редактирование: Декабрь 17, 2014, 12:46 от SunbeamRider » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Декабрь 17, 2014, 11:10 »

Если сканы однотипны и есть штрихкод, может, его как-то использовать для выравнивания относительно краев экрана?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Декабрь 17, 2014, 11:19 »

По графике не помогу, но советую тебе приложить штуки 3 изображения к теме - людям будет проще тебе помочь.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
SunbeamRider
Гость
« Ответ #3 : Декабрь 17, 2014, 11:20 »

К сожалению нет, сканы не однотипны, за исключением того, что все картинки прямоугольные и штрих кодов тоже нет.=(
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Декабрь 17, 2014, 11:21 »

Аттаченный пример картинки повысил бы шансы на ответ. Тут 2 задачи

1) Выделение "фона" одним цветом и фильтрация помех.
2) Сам поворот

Первая должна быть в либе, это вещи известные. Вторая - я бы нашел 4 "угловые" точки и привел 4-х угольник к прямоугольнику
Записан
SunbeamRider
Гость
« Ответ #5 : Декабрь 17, 2014, 11:29 »

Спасибо за совет, что то сразу не подумал, вот картинка до и после.
Записан
SunbeamRider
Гость
« Ответ #6 : Декабрь 17, 2014, 11:39 »

 
Цитировать
1) Выделение "фона" одним цветом и фильтрация помех.
Я немного дубовый в графике, что делает фильтрация помех? И где рыть в либе чтобы найти этот функционал? Матрицы?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Декабрь 17, 2014, 11:52 »

Цитировать
1) Выделение "фона" одним цветом и фильтрация помех.
Я немного дубовый в графике, что делает фильтрация помех? И где рыть в либе чтобы найти этот функционал? Матрицы?
Нет. Напр где-то на краю нашлась точка с цветом сильно отличающимся от фонового. Без фильтра она будет схвачена как "начало изображения", а фильтр ее уберет. Дайте ссылку на доку Вашей либы, подберем.
Записан
SunbeamRider
Гость
« Ответ #8 : Декабрь 17, 2014, 11:58 »

Цитировать
Дайте ссылку на доку Вашей либы, подберем.
Вот ссылка на класс который я юзаю. http://qt-project.org/doc/qt-4.8/qimage.html
Записан
_OLEGator_
Гость
« Ответ #9 : Декабрь 17, 2014, 14:35 »

Можно использовать мощность OpenCV для таких целей:
http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html
http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=houghlines#houghlines
http://docs.opencv.org/trunk/doc/py_tutorials/py_imgproc/py_contours/py_contours_begin/py_contours_begin.html
« Последнее редактирование: Декабрь 17, 2014, 14:40 от _OLEGator_ » Записан
SunbeamRider
Гость
« Ответ #10 : Декабрь 17, 2014, 16:15 »

Цитировать
Можно использовать мощность OpenCV для таких целей:]Можно использовать мощность OpenCV для таких целей
Спасибо, но мне необходимо по возможности обойтись функционалом qt
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Декабрь 17, 2014, 16:32 »

Вот ссылка на класс который я юзаю. http://qt-project.org/doc/qt-4.8/qimage.html
Ну Вы написали "QGraphics", я думал то какая-то либа Улыбающийся В QImage этого нет, можно поискать нужный инструментарий (что в данном случае совершенно разумно), можно и самому сделать (дело вкуса). В последнем случае я бы делал так

- осреднил бы сначала весь имедж, т.е. каждый пиксель заменил на среднее от 8 соседей (незатейливый фильтр).

- прошелся бы по всем граничным пикселям, вычислил их средний цвет и макс отклонение от него (потом бы его немного увеличил)

ну и все, теперь можно находить углы
Записан
SunbeamRider
Гость
« Ответ #12 : Декабрь 17, 2014, 16:44 »

Igors, спасибо, буду пробовать)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 23.