Как я могу использовать метод drawContours OpenCV в Python?

#python #opencv

#python #opencv

Вопрос:

У меня есть следующий код:

 import cv2

img = cv2.imread('image.png')

# Convert image to grayscale image
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Convert the grayscale image to binary image
_, threshold = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY)
print(threshold)
# [[255 255 255 ... 255 255 255]
#  [255 255 255 ... 255 255 255]
#  [255 255 255 ... 255 255 255]
#  ...
#  [  0   0   0 ...   0   0   0]
#  [  0   0   0 ...   0   0   0]
#  [  0   0   0 ...   0   0   0]]
_, contours = cv2.findContours(threshold, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
print(contours)
# [[[-1 -1 -1 -1]]]
  

Почему я получаю такой странный вывод для контуров? Нижняя половина моего изображения черная, а верхняя половина белая. Я ожидал увидеть, contours = [[height, 0, width, height / 2]] где (height, 0) находится нижний левый угол, а (width, height / 2) — верхний правый угол черного прямоугольника на image.png .

Комментарии:

1. Потому что то, что вы храните в переменной с именем contours , — это не количество, а иерархия. Прочитайте документацию .

Ответ №1:

Вместо этого у меня должна быть эта строка кода (см. Документы):

 contours, _ = cv2.findContours(threshold, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
  

Комментарии:

1. Просто добавлю, что одна из причин, по которой это несколько сбивает с толку, заключается в том, что в более старых версиях OpenCV findCountours() возвращалось два значения. Затем в более поздних версиях он вернул три. Теперь в версии 4.0 он вернулся к двум.