OpenCV как очистить контур от шума и ложных срабатываний - PullRequest
0 голосов
/ 08 марта 2019

Я нашел контур изображения с помощью стандартной функции cv2.findContours в Python.

enter image description here

Но, как вы видите, в середине есть точка, и я не могу отфильтровать ее, не нарушив контурной линии.

Как я могу удалить такой ложноположительный кластер? Те, кто находится вне контура, не важны.

    gray = cv2.cvtColor(self.img, cv2.COLOR_RGB2GRAY)

    _, mask = cv2.threshold(gray, thresh=152, maxval=162, type=cv2.THRESH_BINARY)

    self.mask = cv2.bitwise_and(gray, mask)
    self.contours, hierarchy = cv2.findContours(self.mask, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

1 Ответ

0 голосов
/ 19 марта 2019

Один хороший способ избежать ложноположительного результата - рассмотреть контур с наибольшей площадью:

import imutils #to use sorting functionality 
#To install imutils run: pip install imutils for python 2.x
#Run: pip3 install imutils for python 3.x

cnts = imutils.grab_contours(cnts) #where cnts is the variable in which contours are stored, replace it with your variable name
cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:10] #sorts contours according to their area from largest to smallest.

largestCont = cnts[0] #store the largest contour

Это удалит маленькую точку, выдавая только самый большой контур

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