使用opencv和python进行人脸检测。

时间:2022-02-01 21:23:18

I'm working on Face Detection in OpenCV(2.4.6) and python(2.7). I have a very simple code, but its not giving me the desired output.

我正在OpenCV(2.4.6)和python(2.7)中进行人脸检测。我有一个非常简单的代码,但是它没有给出期望的输出。

This is my code:

这是我的代码:

import numpy as np
import cv2
cam = cv2.VideoCapture(0)
name = 'detect'
face_cascade = cv2.CascadeClassifier('C:\opencv\data\haarcascades\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(img, 1.3, 5)
    for (x,y,w,h) in faces:
        img = cv2.rectangle(gray,(x,y),(x+w,y+h),(255,0,0),2)
        cv2.imshow(name, img)    
    k = cv2.waitKey(0)
    if k == 27:
        cv2.destroyWindow(name)
    break

When I run this code, my webcam will start and it will give me a blank window like this 使用opencv和python进行人脸检测。

当我运行这段代码时,我的网络摄像头会启动,它会给我一个像这样的空白窗口。

Then the webcam will turn off, and in the editor I will get an error as follows:

然后网络摄像头会关闭,在编辑器中我将会得到如下错误:

%run "D:/6th sem/1.OpenCV + Python/det.py"
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
C:\Users\HP\AppData\Local\Enthought\Canopy32\App\appdata\canopy-1.3.0.1715.win-x86\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc)
195             else:
196                 filename = fname
--> 197             exec compile(scripttext, filename, 'exec') in glob, loc
198     else:
199         def execfile(fname, *where):

D:\6th sem\1.OpenCV + Python\det.py in <module>()
  7 while True:
  8     s, img = cam.read()
 ----> 9     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 10     faces = face_cascade.detectMultiScale(img, 1.3, 5)
 11     #print s

error: ..\..\..\src\opencv\modules\imgproc\src\color.cpp:3402: error: (-215) scn == 3 || scn == 4

Any suggestions are welcome. Thanks in advance.

任何建议都是受欢迎的。提前谢谢。

1 个解决方案

#1


3  

some webcams need a warmup time, and deliver empty frames on startup. you want to check for that.

一些网络摄像头需要预热时间,并在启动时提供空帧。你要检查一下。

also, who said , that cv2.rectangle returns anything ? where did you get that idea ? from SO ?

还有,谁说的,cv2。矩形回报什么吗?你是怎么想到这个主意的?所以呢?

while cap.isOpened():
    s, img = cam.read()
    if s == None:
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray, 1.3, 5) #hmm, 5 required neighbours is actually a lot.
        for (x,y,w,h) in faces:
            cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) # if you want colors, don't paint into a grayscale...
        cv2.imshow(name, img)    
    k = cv2.waitKey(0)
    if k == 27:
        cv2.destroyWindow(name)
        break

#1


3  

some webcams need a warmup time, and deliver empty frames on startup. you want to check for that.

一些网络摄像头需要预热时间,并在启动时提供空帧。你要检查一下。

also, who said , that cv2.rectangle returns anything ? where did you get that idea ? from SO ?

还有,谁说的,cv2。矩形回报什么吗?你是怎么想到这个主意的?所以呢?

while cap.isOpened():
    s, img = cam.read()
    if s == None:
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray, 1.3, 5) #hmm, 5 required neighbours is actually a lot.
        for (x,y,w,h) in faces:
            cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) # if you want colors, don't paint into a grayscale...
        cv2.imshow(name, img)    
    k = cv2.waitKey(0)
    if k == 27:
        cv2.destroyWindow(name)
        break