У меня есть тестовое изображение (см. 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](https://i.stack.imgur.com/WOzDP.jpg)
![enter image description here](https://i.stack.imgur.com/2dzt2.png)