yuyeyubee 2021-05-29 13:09 采纳率: 33.3%
浏览 286
已采纳

Python cv2 提取人脸后进行裁剪,对裁剪的人脸照片进行base64时报错,请问如何解决

import cv2
import base64

def get_face_img(img):
    image = cv2.imread(img)
    face_model = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
    faces = face_model.detectMultiScale(gray, 1.1, 3, 0, (100, 100))
    for (x, y, w, h) in faces:
        # 截取人脸的指定位置
        image = image[y - 100:y + h + 100, x - 100:x + h + 100]
    retval, buffer = cv2.imencode('.jpg', image)
    image_code = base64.b64encode(buffer)
    return str(image_code)[2:-1]

if __name__ == '__main__':
    get_face_img(img)

以上代码,运行的时候总是出错,报错如下:

cv2.error: OpenCV(4.5.2) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-m8us58q4\opencv\modules\imgcodecs\src\loadsave.cpp:896: error: (-215:Assertion failed) !image.empty() in function 'cv::imencode'

当我把裁剪的代码去掉(image = image[y - 100:y + h + 100, x - 100:x + h + 100]),或者是裁剪前先转换base64,就没有问题,所以我估计是裁剪之后的格式,不是使用imencode函数。

请问应该如何解决,才能将裁剪后的人脸转换为base64呢?我不想写出文件后又读入文件,想直接进行编码。

 

补充:我发现我换了图片之后又可以了,有点图片可以,有点图片不可以,这是个什么情况呢?

  • 写回答

3条回答 默认 最新

  • CSDN专家-HGJ 2021-05-29 16:06
    关注

    用io模块可以实现,代码如下:

    import cv2
    import base64
    import io
    
    def get_face_img(img):
        image = cv2.imread(img)
        face_model = cv2.CascadeClassifier(
            'D:\\Program Files\\Python37\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml')#替换成自己的文件路径
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        faces = face_model.detectMultiScale(gray, 1.1, 3, 0, (100, 100))
        for (x, y, w, h) in faces:
            # 截取人脸的指定位置
            image = image[y - 100:y + h + 100, x - 100:x + h + 100]
        #retval, buffer = cv2.imencode('.jpg', image)
        buffer=io.BytesIO(image)
        image_code = base64.b64encode(str(buffer).encode('utf-8'))
        return str(image_code)[2:-1]
    
    
    if __name__ == '__main__':
        print(get_face_img('F:/images/screenshot/1.jpg'))
    
    
    #输出:
    
    PF9pby5CeXRlc0lPIG9iamVjdCBhdCAweDAwMDAwMjgxOTMzNThGNDg+
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?