
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 Aug 25, 2019 把 width,top,left,height 打出来看看吧,可能是获取的宽高非法,导致取不到图片 |
2 Hconk Aug 25, 2019 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 Dec 26, 2019 楼主解决了吗?@ itIsUnbelievable,我最近也碰到这个错误了。 用 cv2.imread 读入图片,然后使用 cv2.imencode 编码时,也报出这个错。 |
7 bigNewsMaker Dec 26, 2019 |