我從外部程序(無法控制它)中保存了一個文件流(如每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