Real-time face detection OpenCV, Python

I am trying to create a basic program for real-time detection of faces. Here is my code (I'm new to OpenCV):

import numpy as np
import cv2
cam = cv2.VideoCapture(0)
name = 'detect'
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cv2.namedWindow(name, cv2.WINDOW_AUTOSIZE)
while True:
    s, img = cam.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    #print s
    for (x,y,w,h) in faces:
        img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    cv2.imshow(name, img)    
    k = cv2.waitKey(0)
    if k == 27:
        cv2.destroyWindow("Detect")
        break

But when I run this code, I get this error:

OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /build/buildd/opencv-2.4.2+dfsg/modules/core/src/array.cpp, line   2482
Traceback (most recent call last):
File "mytry.py", line 27, in <module>
cv2.imshow(name, img)    
cv2.error: /build/buildd/opencv-2.4.2+dfsg/modules/core/src/array.cpp:2482: error: (-206) Unrecognized or unsupported array type in function cvGetMat

I am new to OpenCV! Please tell me what is wrong with the code, why this error occurs, what changes should I make?

+4
source share
1 answer

Your line:

img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

will draw a rectangle in the image, but the return value will be None, so img will change to None and cannot be drawn.

Try

cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
+2
source

All Articles