使用 OpenCV Python 檢查攝像頭是否已開啟


OpenCV 是一個開源的 Python 計算機視覺庫。它提供了許多函式來執行各種影像或影片處理操作。該庫使用 python 的 Numpy 模組將所有影片或影像陣列表示為 ndarray 型別。

OpenCV-python 需要 numpy 庫,我們需要確保 numpy 模組也安裝在我們的 python 直譯器中。在本文中,我們將瞭解如何使用 OpenCV Python 檢查攝像頭是否已開啟。

檢查攝像頭是否已開啟

我們可能不確定攝像頭的狀態,例如它是否已被其他應用程式開啟或是否工作不正常。在這些情況下,我們的程式會丟擲錯誤而不是建立空幀。為了避免這種情況,我們首先需要檢查攝像頭的狀態。

示例

以下示例僅在攝像頭正常工作時開啟攝像頭並捕獲影片幀,否則它將引發如下錯誤。

import cv2
cam = cv2.VideoCapture(0)
ret, frame = cam.read()
cv2.imwrite('image.jpg', frame)
cam.release()
cv2.destroyAllWindows()

輸出

---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_8052\746690897.py in 
      2 cam = cv2.VideoCapture(0)
      3 ret, frame = cam.read()
----> 4 cv2.imwrite('image.jpg', frame)
      5 cam.release()
      6 cv2.destroyAllWindows()

error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp:783: error: (-215:Assertion failed) !_img.empty() in function 'cv::imwrite'

為了避免上述錯誤,我們需要首先檢查攝像頭的狀態。

使用 cv2.VideoCapture.isOpend() 函式

該函式檢查 cv2.VideoCapture() 物件是否已開始捕獲幀。如果物件開始捕獲影片幀,則返回 True,否則返回 False。

示例

在此示例中,我們將使用 isOpend() 函式來檢查攝像頭的狀態。

import numpy as np
import cv2  
cap = cv2.VideoCapture(0)
while(cap.isOpened()):   # true when camera is open
    while True:
        ret, img_array = cap.read()
        cv2.imshow('img', img_array)
        if cv2.waitKey(1) & 0xff == ord('q'):
            break
    cap.release()
    cv2.destroyAllWindows()
else:
    print("Camera is disconnected")

輸出

但是,如果攝像頭已被其他應用程式訪問/開啟,則此方法會丟擲錯誤。

讓我們看看下面的示例以避免上述情況,在這裡我們將使用 cap.read() 函式。

使用 cv2.VideoCapture.read() 函式

cv2.VideoCapture.read() 函式/方法讀取幀。此函式返回一個包含 2 個值的元組 (例如:(False, none)) -

  • ret:這是一個布林值,如果幀成功讀取則為 true,否則為 false,使用此值,我們檢查讀取是否成功。

  • frame:這是從攝像頭記錄的實際輸入幀。此幀可以儲存在變數中,資料型別為 ndarry。

示例

在此示例中,我們將使用 read() 函式來檢查攝像頭的狀態。

import cv2
cap=cv2.VideoCapture(0)
while True:
    if cap.read()[0]==False:
        print("Camera is disconnected")
        break
    else:
        ret, frame=cap.read()
        cv2.imshow("image",frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

輸出

Camera is disconnected

透過這種方式,我們可以使用 python OpenCV 檢查攝像頭是否正常工作。如果攝像頭斷開連線或已被其他應用程式訪問/開啟,則上述程式將顯示如上所述的訊息。

更新於: 2023年5月30日

1K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.