1. 程式人生 > >OpenCV讀取攝像頭出錯排故20181013

OpenCV讀取攝像頭出錯排故20181013

import cv2
    import numpy as np
    import time
    cap = cv2.VideoCapture(0)
   // time.sleep(5)
    while(1):
        # get a frame
        ret, frame = cap.read()
        # show a frame
        cv2.imshow("capture", frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cap.release()
    cv2.destroyAllWindows() 

在執行開啟攝像頭並實時顯示影象的程式中出現報錯。開發環境為PC,攝像頭為筆記本自帶的網路攝像頭。然而在更換並測試其它USB攝像頭後程序正常。 推測:是網路攝像頭的原因嗎?先除錯程式碼,定位錯誤再說。 實時顯示影象通過一個while迴圈實現,在迴圈體中,先是VideoCaptrue::read,然後imshow(); 程式編譯正常,執行時報錯,並出現OpenCV Error:Assertion failed(size.width>0&&size.height>0)in cv::imshow,…… 上面這個錯誤的意思是:影象的寬度和高度都無效,導致無法顯示影象。通常來說是影象幀的資料出現問題了。 一步步定位。發現bSuccess= cap.read(frame)返回了false。讀取幀失敗。為什麼? 個人推測是筆記本網路攝像頭開啟時要頓2秒左右進行自檢造成。 通過自己的單步除錯時是可以獲取ret=true 的。

因此,我將增加一句 time.sleep(5) 來保證進入迴圈時讀取攝像頭是成功的,這樣程式就正常運行了。自己是AI路上的菜鳥,標記一下解決了自己第一個BUG