2015-11-05 60 views
0

我從外部程序(無法控制它)中保存了一個文件流(如每2秒)。當我嘗試讀取該圖像時,有時會在寫入時讀取它,所以我從OpenCV獲取關於JPEG結束的消息。有沒有辦法來測試文件是否壞,如果是這樣,等待一段時間,然後嘗試重新讀取它?在cv2中檢測/避免「JPEG提前結束」 - python

謝謝...

+0

https://docs.python.org/2/tutorial/errors.html#可能有助於 –

+0

我很確定它不會引發異常。所以這是行不通的... – Omer

回答

1

爲我工作的解決方案是讀取文件的二進制數據,然後把它轉化爲一個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 
0

我研究這個有點「錯誤「,並且它似乎是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)