Как обнаружить и нарисовать контуры с помощью OpenCV в Python?

Я написал следующий код для обнаружения и рисования контуров:

img = cv2.imread('test2.tif');

if not img is None:
    imgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY);
    ret,thresh = cv2.threshold(imgray,127,255,0);
    contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE);

    #draw a three pixel wide outline 
    cv2.drawContours(img,contours,-1,(0,255,0),3);

И вот ошибка, которую я получил:

Traceback (последний вызов был последним): файл "C:/Users/RKsingh/Desktop/ Обработка изображений /intro-to-contours.py", строка 10, в контурах, иерархия = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE); ValueError: слишком много значений для распаковки

Что случилось? Я использую Python 2.7 и OpenCV 3.1.0

2 ответа

Решение

Чтобы подчеркнуть точку зрения Сельчука, синтаксис, связанный с OpenCV 3.x, немного изменился. Он имеет другое возвращаемое значение, когда дело доходит до cv2.findContours, Возвращает следующее image, contours, hierarchy,

Предыдущие версии OpenCV, однако, возвращают только contours, hierarchy, Они не возвращают изображение.

Измените следующую строку. Вы используете OpenCV 3.1.0, но вы написали код с использованием OpenCV 2.7.x.

(cnts, _) = cv2.findContours(thresh.copy(), cv2.RETR_TREE,
      cv2.CHAIN_APPROX_SIMPLE)

Также эта ссылка поможет вам.

Другие вопросы по тегам