关于从人的图片中截取脸部

# 本文件是用来从Photos写真美图文件夹中,用opencv自带的人脸识cascade别出脸部并截图保存到Faces文件夹中

# opencv的自带人脸检测中,haarcascade_frontalface_alt效果最好,缺点是时间长

def detect(filename, cascade_file = "E:/installation/OpenCV/opencv/build/etc/haarcascades/haarcascade_frontalface_alt.xml"):
    if not os.path.isfile(cascade_file):
        raise RuntimeError("%s: not found" % cascade_file)
        # 这里确认找到cascades识别器,找不到显示not found,地址请根据你的自己安装位置修改一下
    cascade = cv2.CascadeClassifier(cascade_file)
    image = cv2.imread(filename)
    # 读取图片
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # 获取图片的灰度图
    gray = cv2.equalizeHist(gray)

    faces = cascade.detectMultiScale(gray,
                                     scaleFactor=1.1,
                                     minNeighbors=5,
                                     minSize=(48, 48))
    # 识别脸部
    for i, (x, y, w, h) in enumerate(faces):
        # 定义脸部在图像上的坐标
        face = image[y: y + h, x:x + w, :]
        # 获取坐标位置的图
        face = cv2.resize(face, (96, 96))
        # 重新定义大小
        save_filename = '%s-%d.jpg' % (os.path.basename(filename).split('.')[0], i)
        # 定义保存图片的地址
        cv2.imwrite("Faces/" + save_filename, face)
        # 保存图片


if __name__ == '__main__':
    if os.path.exists('Faces') is False:
        os.makedirs('Faces')
    # 检查Faces文件夹,没有就创建一个
    file_list = glob('Photos/*.jpg')
    for filename in file_list:
        detect(filename)
 
代码运行出现以下问题:
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv::cvtColor, file C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp, line 11048
Traceback (most recent call last):
  File "D:/Users/pycharm/BeautifulGirls/TakeImgFace.py", line 49, in <module>
    detect(filename)
  File "D:/Users/pycharm/BeautifulGirls/TakeImgFace.py", line 22, in detect
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.error: C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:11048: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor




Process finished with exit code 1
该怎么解决啊,求帮助
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值