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