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
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]]
Do this:
cv2.drawContours(img, [hull.astype(int)], 0, (255, 0, 0), 3)