Python 用相机捕捉面部区域

Python 用相机捕捉面部区域,python,opencv,camera,capture,Python,Opencv,Camera,Capture,我在进行人脸检测和将图像裁剪到人脸上时遇到问题,下面是我的代码 import cv2 class Crop: #constructor def __init__(self, image): self.data = image def facechop(self): # read xml for training data facedata = "haarcascade_frontalface_default.xml"

我在进行人脸检测和将图像裁剪到人脸上时遇到问题,下面是我的代码

import cv2

class Crop:
    #constructor
    def __init__(self, image):
        self.data = image
    def facechop(self):
        # read xml for training data
        facedata = "haarcascade_frontalface_default.xml"
        cascade = cv2.CascadeClassifier(facedata)
        # read image file
        img = cv2.imread(self.data, 0)

        minisize = (img.shape[1], img.shape[0])
        miniframe = cv2.resize(img, minisize)

        faces = cascade.detectMultiScale(miniframe)
        for f in faces:
            x, y, w, h = [ v for v in f ]
            cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 255))

            sub_face = self.data[y:y + h, x:x + w]

        # Show picture
        cv2.imshow('img', sub_face)
        return
输入图像文件

picture = 'izz.jpg'
pic = Crop(gambar)

pic.facechop()

# keyboard input to destroy the window
while(True):
    key = cv2.waitKey(0)
    if key in [27, ord('Q'), ord('q')]:
        break
当它运行时,它不会在函数的
之后执行raw,直到
sub\u face=self.data[y:y+h,x:x+w]
。它直接进入cv2.imshow('img',子面)
。因此,
子面
未知。为什么效果不好?
我正在使用Aptana来调试它。谢谢。

尝试将代码更改为以下内容:

import cv2

def crop(img):
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    sub_face = img

    faces = face_cascade.detectMultiScale(img, 1.1, 5)
    for (x,y,w,h) in faces:
        sub_face = img[y:y+h, x:x+w]

    return sub_face


imageToCrop = cv2.imread('izz.jpg',0)
croppedImage = crop(imageToCrop)

cv2.imshow('img',croppedImage)
cv2.waitKey(0)
cv2.destroyAllWindows()

谢谢@Aphire,实际上你的代码可以运行,但是当我尝试输入这个代码来输入有一个面的图像文件时
picture='izz.jpg'
pic=Crop(picture)`
pic.facechop()
就像我以前的帖子一样。这仍然是相同的错误。等等,我将上传脚本中的所有函数,包含加载图像的正确方式。我会在一秒钟内编辑我的帖子。好的,试试看,如果没有找到人脸,它会返回未经修改的图像。现在它工作了。现在我试着从另一个脚本调用它。谢谢,我建议将该函数移到您正在使用的脚本中,这是一个更简单的解决方案。如果你接受我的回答,这将确保这个问题不会被列入“未回答”。(或者关门)