Ошибка: (-215: утверждение не выполнено) npoints> 0 при работе с контурами с использованием OpenCV - PullRequest
2 голосов
/ 08 октября 2019

Когда я запускаю этот код:

import cv2

image=cv2.imread('screenshoot10.jpg')
cv2.imshow('input image', image)

gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

edged=cv2.Canny(gray,30,200)
cv2.imshow('canny edges',edged)

_, contours = 
cv2.findContours(edged,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
cv2.imshow('canny edges after contouring', edged)

print(contours)
print('Numbers of contours found=' + str(len(contours)))

cv2.drawContours(image,contours,-1,(0,255,0),3)
cv2.imshow('contours',image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Я получаю эту ошибку:

OpenCV (4.1.1) C: \ projects \ opencv-python \ opencv \modules \ imgproc \ src \ drawing.cpp: 2509: ошибка: (-215: утверждение не выполнено) npoints> 0 в функции 'cv :: drawContours'

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 08 октября 2019

В зависимости от версии OpenCV, cv2.findContours() имеет различные подписи возврата. В v3.4.X возвращаются три элемента. В v2.X и v4.1.X возвращаются два элемента. Вы можете легко получить контуры независимо от версии, подобной этой

cnts = cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
    ...
0 голосов
/ 08 октября 2019

Согласно документации для findContours, метод возвращает (контуры, иерархия), поэтому я думаю, что код должен быть:

contours, _ = cv2.findContours(edged,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)

вместо

_, contours = cv2.findContours(edged,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...