Я изучал бета-документацию OpenCV 3.0.0 о начале работы с контурами и столкнулся с несколькими ошибками при попытке использовать код контура из документации. Я понятия не имею, как это исправить, может ли кто-нибудь мне помочь?
Документация Я скопировал код из: http://docs.opencv.org/trunk/doc/py_tutorials/py_imgproc/py_contours/py_contours_begin/py_contours_begin.html#contours-getting-started
Тестовая картинка для нанесения контура:
http://www.k6-geometric-shapes.com/image-files/pyramid-base-rectangle.jpg
Строка кода, вызвавшая ошибку:
cv2.drawContours(img, contours, 3, (0,255,0), 3)
Ошибка:
Traceback (most recent call last):
File "/home/anthony/Documents/Programming/Python/Computer-Vision/OpenCV-Doc/contour-draw.py", line 13, in <module>
cv2.drawContours(img, contours, 3, (0,255,0), 3)
error: /home/anthony/Downloads/opencv-3.0.0-beta/modules/imgproc/src/drawing.cpp:2160: error: (-215) 0 <= contourIdx && contourIdx < (int)last in function drawContours
Есть еще одна функция drawContour, которая не работает. Как только я прокомментирую вышеприведенную и прокомментирую другую функцию (ниже), она выдаст другую ошибку.
Строка кода:
cnt = contours[4]
cv2.drawContours(img, [cnt], 0, (0,255,0), 3)
Ошибка: трассировка (последний последний вызов): файл «/home/anthony/Documents/Programming/Python/Computer-Vision/OpenCV-Doc/contour-draw.py», строка 15, в cnt = контуры [4] IndexError: индекс списка вне допустимого диапазона
Есть две другие функции drawContours, которые закомментированы. Есть бордюрный, который может успешно создавать контур картинки, но по каким-то причинам выдает контур окна.
Код:
import numpy as np
import cv2
img = cv2.imread('rectangle-pink.jpg')
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)
#Displays the border
#cv2.drawContours(img, contours, -1, (0,255,0), 3)
cv2.drawContours(img, contours, 3, (0,255,0), 3)
#cnt = contours[4]
#cv2.drawContours(img, [cnt], 0, (0,255,0), 3)
cv2.imshow('Contour Pic', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
len(contours) - 1
- это самый большой допустимый индекс, к которому вы можете получить доступ. - person berak   schedule 06.01.2015