在python中捕获脸部框架

问题描述:

我是python中的新手。我使用python 3.5和openCV3。我有以下代码是假设通过网络摄像头捕获约20帧:在python中捕获脸部框架


import cv2 
import time 
cam = cv2.VideoCapture(0) 
print(cam.isOpened()) 
detector=cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 

Id=1 
sampleNum=0 

time.sleep(5) 
while(True): 
    ret, img = cam.read() 
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
    faces = detector.detectMultiScale(gray, 1.3, 5) 

    for (x,y,w,h) in faces: 
     cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) 

     #incrementing sample number 
     sampleNum=sampleNum+1 
     #saving the captured face in the dataset folder 
     cv2.imwrite("dataSet/User."+Id +'.'+ str(sampleNum) + ".jpg", gray[y:y+h,x:x+w]) 

     cv2.imshow('frame',img) 
    #wait for 100 miliseconds 
    if cv2.waitKey(100) & 0xFF == ord('q'): 
     break 
    # break if the sample number is morethan 20 
    elif sampleNum>20: 
     break 
cam.release() 
cv2.destroyAllWindows() 

但是我发现了这样的错误:

灰色= cv2.cvtColor(IMG, cv2.COLOR_BGR2GRAY)

错误:...... \ modules \ imgproc \ src \ color.cpp:7456:error:(-215)scn == 3 || scn == 4功能cv :: ipp_cvtColor

请问我该如何克服这种错误?

+0

什么是打印的输出(cam.isOpened())? –

+0

我只是仔细检查凸轮是否工作。但是,我上面的代码未能捕捉到我的照片并将其保存在数据集文件夹中! – Mary

此代码在我的机器上工作并跟踪我的脸部。请尝试以下操作:

  • 确保haarcascade xml文件与您运行代码的位置相同。您也可以指定文件的绝对路径。
  • 检查gray图片是否看起来像您期望的cv2.imgshow('gray', gray)(并插入睡眠以便您可以看到它)。该cam.isOpened()应返回true
  • 检查,如果其数据类型是UINT8 np.ndarray:print(gray.dtype)
+0

我可以现在使用什么版本的python? 3.5?或更少? – Mary

+0

另外,你的意思是说我必须将这行从cv2.imshow('frame',img)改为cv2.imshow('gray',grey)!!!另外,我试图指定它不起作用的xml的绝对路径! – Mary

+0

文件 “C:/用户/玛丽/桌面/项目/面部个记录/ face_datasets.py”,第13行,在 灰色= cv2.cvtColor(IMG,cv2.COLOR_BGR2GRAY) 错误:.. \ .. \ .. \ modules \ imgproc \ src \ color.cpp:7456:error:(-215)scn == 3 || scn == 4在函数cv :: ipp_cvtColor中 – Mary