使用 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 in2 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 检查摄像头是否正常工作。如果摄像头断开连接或已被其他应用程序访问/打开,则上述程序将显示如上所述的消息。

数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP