2016-06-08 1 views
0

Как определить прямоугольник или пятиугольник изображения, используя OpenCV? У меня есть фотографии с карточкой имени, и я должен их обнаружить. Я пробовал функцию HoughLinesP(), но это просто поиск линий.OpenCV - Обнаружение прямоугольника или пентагона

Я должен определить фигуру над изображением и расширить изображение, чтобы показать точки пересечения прямоугольника.

+0

_ "и его поиск только линий" _ это то, для чего преобразование Хафа для строк. Пожалуйста, покажите несколько изображений и некоторый код, и посмотрите [ask] – Miki

ответ

1

Вы можете выполнить следующие действия:

  1. Найти контуры на изображении с помощью findContours.

  2. Выполните approxPoly, чтобы получить форму многоугольника всех контуров, присутствующих на изображении.

  3. Проверьте приближенный размер контура (число сторон многоугольника):

    , если число сторон 4 => Прямоугольник

    , если число сторон 5 => Пентагон

код в Python, но должно быть легко преобразовать в C++:

import cv2 

gray = cv2.imread('img.png',0) 

ret,thresh = cv2.threshold(gray,127,255,1) 

contours,h = cv2.findContours(thresh,1,2) 

for cnt in contours: 
     approx = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True) 
    if len(approx)==5: 
     print "pentagon" 
    elif len(approx)==4: 
     print "rectangle" 
+1

Это будет работать только для тривиальных изображений. Но это начало ...; D Можете ли вы опубликовать фрагмент, чтобы показать, как это сделать? – Miki

+0

@Miki, я не знаю, что такое «тривиальное изображение» в ваших случаях, если у вас есть примеры изображений, которые могут не работать для них, отредактируйте свой вопрос и соедините их. –

+0

Это не мой вопрос: D – Miki

0

Вы можете использовать функцию MatchShapes.

Here is an example.

Я также нашел учебник, реализующий подход, похожий на то, что предложил @Haimovitz: Это here.

0

Приятный пример того, как определить прямоугольник в изображении. проверьте это link