【问题标题】:Capture face area by camera用相机捕捉面部区域
【发布时间】:2015-07-06 01:58:15
【问题描述】:

我在进行面部检测和将图像裁剪为面部工作时遇到问题,下面是我的代码。

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

当它运行时,它在for 函数之后直到sub_face = self.data[y:y + h, x:x + w] 才执行原始操作。它直接转到cv2.imshow('img', sub_face)。所以,sub_face 是未知的。为什么效果不好? 我正在使用 Aptana 来调试它。谢谢。

【问题讨论】:

    标签: python opencv camera capture


    【解决方案1】:

    尝试将您的代码更改为如下:

    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 = 裁剪(图片)`pic.facechop() 喜欢我之前的帖子。它仍然得到同样的错误。
    • 等一下,我会将所有内容作为脚本中的函数上传,其中包含加载图像的正确方法。我将在一秒钟内编辑我的帖子。
    • 好吧试试,如果没有找到人脸,它会返回未裁剪的图像
    • 它正在工作。现在我试图从另一个脚本中调用它。谢谢
    • 我建议将该函数移到您正在使用的脚本中,这是更简单的解决方案。如果您接受我的回答,它将确保这个问题不会被放入“未回答”中。 (或关闭)
    猜你喜欢
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多