我从外部程序(无法控制它)中保存了一个文件流(如每2秒)。当我尝试读取该图像时,有时会在写入时读取它,所以我从OpenCV获取关于JPEG结束的消息。有没有办法来测试文件是否坏,如果是这样,等待一段时间,然后尝试重新读取它?在cv2中检测/避免“JPEG提前结束” - python
谢谢...
我从外部程序(无法控制它)中保存了一个文件流(如每2秒)。当我尝试读取该图像时,有时会在写入时读取它,所以我从OpenCV获取关于JPEG结束的消息。有没有办法来测试文件是否坏,如果是这样,等待一段时间,然后尝试重新读取它?在cv2中检测/避免“JPEG提前结束” - python
谢谢...
为我工作的解决方案是读取文件的二进制数据,然后把它转化为一个numpy.array:
img = None
while True:
with open(image_path, 'rb') as img_bin:
buff = StringIO.StringIO()
buff.write(img_bin.read())
buff.seek(0)
temp_img = numpy.array(PIL.Image.open(buff), dtype=numpy.uint8)
img = cv2.cvtColor(temp_img, cv2.COLOR_RGB2BGR)
if img is not None:
break
我研究这个有点“错误“,并且它似乎是C中的一个警告,python无法正确检测。这是一个非常棘手的问题,并且是因为图像不完整而发生的。检测是否像正常结束(与B '\ XFF \ xd9' 字符)似乎工作:
with open(os.path.join(path, file), 'rb') as f:
check_chars = f.read()[-2:]
if check_chars != b'\xff\xd9':
print('Not complete image')
else:
imrgb = cv2.imread(os.path.join(path, file), 1)
https://docs.python.org/2/tutorial/errors.html#可能有助于 –
我很确定它不会引发异常。所以这是行不通的... – Omer