Python OpenCV находит самый большой контур - PullRequest
0 голосов
/ 27 мая 2020

У меня проблема с поиском самого большого контура. Я использую изображение после хитрого обнаружения краев: Canny edge detection

Затем я использую

contours, hierarchy = cv2.findContours(edges,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

, чтобы найти контуры:

Contour detection

Следующий шаг - найти самый большой контур ... Я пробовал:

contour = max(contours, key = cv2.contourArea)

, но это дает мне что-то вроде:

enter image description here

Есть идеи, как это исправить? Спасибо!

Код:

import cv2
image = cv2.imread('TEST_1.png')

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

gaussian = cv2.GaussianBlur(gray,(3,3),cv2.BORDER_DEFAULT)
edges = cv2.Canny(gaussian,100,200)

contours, hierarchy = cv2.findContours(edges,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
contour = max(contours, key = cv2.contourArea)

contourImg = cv2.drawContours(image, contour, -1, (0,255,0), 3)
cv2.imshow("Contours", contourImg)

cv2.waitKey(0)
cv2.destroyAllWindows()

Кроме того, площадь контура для этой точки составляет 109, а для моего самого большого контура - 3,5

1 Ответ

0 голосов
/ 27 мая 2020

Видно вроде не замкнуты какие-то контуры. Использование длины в качестве критерия, а не площади в этом случае сработало для меня.

import cv2
image = cv2.imread('TEST_1.png')

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

gaussian = cv2.GaussianBlur(gray,(3,3),cv2.BORDER_DEFAULT)
edges = cv2.Canny(gaussian,100,200)

contours, hierarchy = cv2.findContours(edges,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
contour = max(contours, key = len)

contourImg = cv2.drawContours(image, contour, -1, (0,255,0), 3)
cv2.imshow("Contours", contourImg)

cv2.waitKey(0)
cv2.destroyAllWindows()

Я также изменил метод в findContours с cv2.CHAIN_APPROX_SIMPLE на cv2.CHAIN_APPROX_NONE. Или попробуйте решить проблему, изменив предельные значения в cv2.Canny () и используя cv2.RETR_EXTERNAL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...