簡體   English   中英

Try-Catch Exception 在 OpenCV-python 中不起作用

[英]Try-Catch Exception won't work in OpenCV-python

所以我特意在 cv2.VideoCapture() 中放置了一個文件,該文件在我的計算機中不存在以測試我已放入代碼中的 try-catch 系統,但由於某種原因,它仍然會發出與我相同的錯誤沒有將 try-catch 放入我的代碼中。 我該如何解決??

代碼:

import numpy as np
import cv2



try:
    cap = cv2.VideoCapture('trial.mkv')
    while (cap.isOpened()):
        ret, frame = cap.read()

        cv2.imshow('frame', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()
except:
    print("no file found")

錯誤:

[ERROR:0] global C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-cff9bdsm\opencv\modules\videoio\src\cap.cpp (142) cv::VideoCapture::open VIDEOIO(CV_IMAGES): raised OpenCV exception:

OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-cff9bdsm\opencv\modules\videoio\src\cap_images.cpp:253: error: (-5:Bad argument) CAP_IMAGES: can't find starting number (in the name of file): trial.mkv in function 'cv::icvExtractPattern'

try/except語句捕獲stderr並且仍然打印stderr msg 時,這僅意味着庫只是將所有錯誤消息發送到stderr

眾所周知, OpenCV庫存在這個問題,並且有解決方法。 您應該在此處閱讀詳細答案 - OpenCv 錯誤如何在 Python 中停止打印 OpenCV 錯誤消息

我絕對同意@AzyCrw4282,但我還指出了您代碼中的兩個問題,因此我正在寫作作為答案。

  • 問題 #1:使用except cv2.error as error來捕獲錯誤:

  •  except cv2.error as error: print("[Error]: {}".format(error))

    結果:

  •  [Error]: OpenCV(4.0.0) /Users/opencv/modules/highgui/src/window.cpp:350: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow' Process finished with exit code 0
  • 即使我給出了一個無效的視頻文件:

     OpenCV: Couldn't read video stream from file "trial.mkv" Process finished with exit code 0
  • 如果您使用except cv2.error as error則實際上try-catch塊正在工作。

  • 問題 2:請始終檢查框架


例如:如果您想停止應用程序,請使用:

  •  if frame is None break

    或者

    ret, frame = cap.read() if ret: cv2.imshow('frame', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break

    如果幀返回則顯示

完整代碼:

import cv2

try:
    cap = cv2.VideoCapture('dread.mp4')
    while cap.isOpened():
        ret, frame = cap.read()
        if ret:
            cv2.imshow('frame', frame)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
except cv2.error as error:
    print("[Error]: {}".format(error))

cap.release()
cv2.destroyAllWindows()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM