OpenCV讀取攝像頭出錯排故20181013
阿新 • • 發佈:2018-12-15
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