opencv findContours, значение contourArea не соответствует - PullRequest
0 голосов
/ 12 марта 2019

У меня есть тестовое изображение (см. 1-е изображение ниже), и очень простой код для размытия и обнаружения нечеткого края этого изображения, а затем с помощью findcontours для получения контуров.

image = cv2.imread("testimage.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(image, (11,11), 0)
cv2.imshow("Blurred", blurred)
canny = cv2.Canny(blurred, 50, 130)
cv2.imshow("Canny", canny)

(_, conts, _) = cv2.findContours(canny.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
img = image.copy()
for c in conts:
  M = cv2.moments(c)
  cX = int(M["m10"] / M["m00"])
  cY = int(M["m01"] / M["m00"])
  cv2.drawContours(img, [c], -1, (0,255,0), 1)
  cv2.putText(img, "area:"+str(cv2.contourArea(c)), (cX-20,cY-20),
          cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)

  cv2.imshow("Contours", img)

cv2.waitKey(0)

Я положил значение каждого контура на изображение. Как вы можете видеть, контуры выглядят аналогично, но есть один контур с очень низким значением площади (всего 16,0).

В чем может быть причина этого? А как получить согласованные значения среди этих контуров?

enter image description here

enter image description here

...