#opencv #contour #area
#opencv #контур #область
Вопрос:
У меня есть тестовое изображение (см. 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).
Что может быть причиной этого? И как получить согласованные значения среди этих контуров?
Комментарии:
1. Взгляните на документацию по contourrea : Таким образом, возвращаемая область и количество ненулевых пикселей, если вы рисуете контур с помощью
drawContours
илиfillPoly
, могут отличаться. Мы столкнулись с этой проблемой в наших проектах и поэтому написали небольшой метод, который рисует заполненные контуры на пустом изображении и подсчитывает ненулевые пиксели. Громоздкий, но единственно интуитивно понятный способ — с нашей точки зрения — получить правильную область контура.2. @HansHirse Благодарю вас за вашу немедленную помощь. Вы имеете в виду «рисует заполненные контуры на ЧЕРНОМ изображении»?
3. Да, изображение черного цвета. Я имел в виду пустое изображение, как в пустом изображении.
4. @HansHirse Еще раз спасибо. Я все еще новичок в opencv. Можете ли вы привести мини-пример того, как «заполнить» контур пустого изображения?
5. Пожалуйста, взгляните на документацию
drawContours
. Или посмотрите на это руководство по Python.