невозможно получить контур правильно

1

Я играю с openCV и выполняю простые задачи ниже.

1) Читать изображение

2) пороговое значение

3) Поиск контуров.

4) Рисование всех контуров в пустом изображении.

5) Нанесение индивидуального контура.

Рисование всех контуров на фиктивном изображении выглядит хорошо, тогда как рисование одного контура создает рассеянный контур, как показано на приведенных ниже изображениях.

Оригинал:

Изображение 174551

Все контуры:

Изображение 174551

Единый контур:

Изображение 174551

Пожалуйста, найдите код ниже.

import  cv2
import numpy as np

#Reading Image.
srcImg = cv2.imread("./bottle.jpeg")

#Color Conversion.

grayedImg = cv2.cvtColor(srcImg,cv2.COLOR_RGB2GRAY)
__, thresholdedImg = cv2.threshold(grayedImg, 240, 255, cv2.THRESH_BINARY)

#Noice Removal
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
erodeImage = cv2.erode(thresholdedImg,kernel, iterations=1)
dilatedImg = cv2.dilate(erodeImage,kernel, iterations=1)
_, contours, _ = cv2.findContours(dilatedImg,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

#draw All Contours.

dummyImg = np.zeros(grayedImg.shape, dtype=grayedImg.dtype)
cv2.drawContours(dummyImg, contours, -1, 255, 1)
cv2.imshow("All Contours", dummyImg)
cv2.imwrite("allContours.jpeg",dummyImg)

#draw Individual Contours.

mask =  np.zeros(dummyImg.shape[:2], dtype= dummyImg.dtype)
isolatedImg = cv2.drawContours(mask, contours[9], -1, 255, 1)

cv2.imshow("Indivial Contours.", isolatedImg)
cv2.imwrite("single.jpeg",isolatedImg)

cv2.waitKey(0)
Теги:
opencv
opencv3.0
opencv-contour

1 ответ

1
Лучший ответ

Вы должны заключить другой набор квадратных скобок:

isolatedImg = cv2.drawContours(mask, [contours[9]], -1, 255, 1)

Ожидаемый результат:

Изображение 174551

Если вы cv2.findContours() глубоко, cv2.findContours() возвращает list массивов. Теперь каждый array содержит сведения о количестве точек, составляющих контур.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню