关于 opencv 的一个错误问题(Raw image encoder error: Empty JPEG image)

2019-08-25 21:35:23 +08:00
 itIsUnbelievable
Traceback (most recent call last):
  File "c:\Users\Administrator\Desktop\pyqt_baiduyun\baiduyun1.py", line 111, in run
    cut_img=get_faceimg(frame,i,face_list)              #注册用的剪切后的人脸照片
  File "c:\Users\Administrator\Desktop\pyqt_baiduyun\utils\utils.py", line 156, in get_faceimg
    cut_img_str = cv2.imencode('.jpg', cutImg)[1].tostring()
cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\imgcodecs\src\grfmt_base.cpp:145: error: (-10:Unknown error code -10) Raw image encoder error: Empty JPEG image (DNL not supported) in function 'cv::BaseImageEncoder::throwOnEror'

-----------------------分割线--------------------------------
156 行的函数如下:

#获取人脸裁剪图片
def get_faceimg(frame,i,face_list):
    width,top,left,height=get_face_location(i,face_list)        #获取人脸的左顶点坐标和长宽。
    cutImg = frame[top:top+height,left:left+width]             #[y1:y2,x1:x2]切片
    cut_img_str = cv2.imencode('.jpg', cutImg)[1].tostring()  # 将图片编码成流数据,放到内存缓存中,然后转化成 string 格式
    cut_img = str(base64.b64encode(cut_img_str),'utf-8') # 编码成 base64
    return cut_img

-----------------------分割线--------------------------------
请问各位老哥这个错误是什么原因呢? 我在 pyqt 里多线程同时调用 opencv 的 videocapture()读取视频的每一帧,对每一帧进行处理。结果经常随机性地报这个错误,google 了没找到合适的解释,下面这篇感觉比较符合: https://www.cnblogs.com/hul201610101100/p/10233211.html
但是还是不知道如何修改,希望各位老哥给支个招。

3585 次点击
所在节点    问与答
7 条回复
minami
2019-08-25 21:52:09 +08:00
把 width,top,left,height 打出来看看吧,可能是获取的宽高非法,导致取不到图片
Hconk
2019-08-25 22:00:51 +08:00
在你的 get_faceimg 函数开头判断下 frame 是不是为空,为空就跳过去,概率性的话我猜可能和相机驱动或者相机参数设置有些关系,只是猜测可以检查下。
itIsUnbelievable
2019-08-25 22:33:10 +08:00
@minami 这个没问题,因为是对一个视频一直取帧,一般是正常运行了一段时间然后才报这个错,前面图片截取都是正常的。
itIsUnbelievable
2019-08-25 22:34:39 +08:00
@Hconk
while(True):
ret,frame = cap.read()
itIsUnbelievable
2019-08-25 22:39:17 +08:00
@itIsUnbelievable 刚才手快按出去了,尴尬。。。
while(True):
ret,frame = cap.read()
if ret is True:
pass
这里我有判断,如果是这里的问题那为何最开始不报错,到后面才报错呢?
而且我目前读取的是本地视频文件,还没用到摄像头
bigNewsMaker
2019-12-26 15:33:24 +08:00
楼主解决了吗?@ itIsUnbelievable,我最近也碰到这个错误了。
用 cv2.imread 读入图片,然后使用 cv2.imencode 编码时,也报出这个错。
bigNewsMaker
2019-12-26 15:39:13 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/594988

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX