OpenCV error: (-215) npoints > 0 in function cv::drawContours

JWALIN THAKER picture JWALIN THAKER · Mar 27, 2017 · Viewed 7.7k times · Source

Here is the entire code i wrote to have a hand detection but unfortunately I'm stuck as the convexHull output when fed to the drawContours() function is giving an error. Please help! @attached herewith is the error too.

import cv2
import numpy as np
import math

key = 0
skin_lower = (0, 44, 44)
skin_upper = (28, 133, 128)
camera = cv2.VideoCapture(0)

print("Play something!")
while True:
    retval, img = camera.read()
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    mask = cv2.inRange(hsv, skin_lower, skin_upper)
    blurSize = 5
    elementSize = 5
    mask = cv2.medianBlur(mask, blurSize)
    element = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (11, 11), (5, 5))
    mask = cv2.dilate(mask, element)
    _, contours, hierarchy = cv2.findContours(mask.copy(), 
cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    largestContour = 0
    for i in range(1, len(contours)):
        if cv2.contourArea(contours[i]) > cv2.contourArea(contours[largestContour]):
            largestContour = i
    print largestContour
    cv2.drawContours(img, contours, largestContour, (0, 255, 0), 1)
    if len(contours) != 0:
        hull = cv2.convexHull(contours[largestContour], returnPoints=False)
        print hull
        cv2.drawContours(img, hull, 0, (255, 0, 0), 3) #error here

    cv2.imshow('mask', mask)
    cv2.imshow('image', img)

    k = cv2.waitKey(1)
    if k == 27:  # wait for ESC key to exit
        cv2.destroyAllWindows()
        break

OUTPUT :

Play something!
0
0
0
OpenCV Error: Assertion failed (npoints > 0) in cv::drawContours, file 
C:\projects\opencv-python\opencv\modules\imgproc\src\drawing.cpp, line 2481
Traceback (most recent call last):
File "F:/PYTHON/AIRKEY/main.py", line 42, in <module>
cv2.drawContours(img, hull, 0, (255, 0, 0), 3)
cv2.error: C:\projects\opencv-
python\opencv\modules\imgproc\src\drawing.cpp:2481: error: (-215) npoints > 
0 in function cv::drawContours

3
[[310]
[290]
[288]
[ 97]
[ 96]
[ 92]
[ 81]
[ 74]
[ 68]
[ 43]
[ 42]
[ 38]
[ 34]
[ 32]
[ 31]
[ 13]
[ 11]
[  0]
[464]
[458]
[402]
[389]
[387]
[360]
[359]
[353]
[349]
[347]
[345]
[311]]

Answer

Antonvh picture Antonvh · Jan 24, 2018

Do this:

cv2.drawContours(img, [hull.astype(int)], 0, (255, 0, 0), 3)