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呢?我不想写出文件后又读入文件,想直接进行编码。

 

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

用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+

把image打印出来看看,是不是裁剪以后已经是base64编码了。

您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~

ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓

【电脑端】戳>>>  https://vip.csdn.net/askvip?utm_source=1146287632
【APP 】  戳>>>  https://mall.csdn.net/item/52471?utm_source=1146287632