如果我在释放后再次访问网络摄像头,OpenCV Python 捕获失败
OpenCV Python capture fails if I access a webcame again after releasing it
我正在开发一个多线程应用程序来从四个 USB 网络摄像头捕获图像。为了简单和早期开发,我在 640x480 和 30fps 下使用罗技 C920。
我有一个简单的功能,打开相机并设置一些参数,然后释放相机。因为这是一个多线程应用程序,当按下一个按钮时,每个线程有四个线程 运行。效果很好。
def camParameter(previewName, camID):
#Set camera object and set parameters
start_time = time.time()
cam_test = True
while cam_test:
cam = cv2.VideoCapture(camID)
present_time = time.time()
if present_time - start_time > 2:
print("Could not open camera ", str(camID))
break
if cam.isOpened():
cam_test=False
width = 640
height = 480
fps = 30
test_width = cam.get(3)
test_height = cam.get(4)
test_fps = cam.get(5)
if test_width != width:
cam.set(3,width)
if test_height != height:
cam.set(4,height)
if test_fps != fps:
cam.set(5,fps)
print("Parameters set for camera ", str(camID))
cam.release()
但是,如果我再次调用该函数,或尝试打开摄像头进行流式传输,则会出现以下错误:
VIDEOIO ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV
Unable to stop the stream: Device or resource busy
我可以使用 GUVCviewer 打开相机,或者 unplug/replug 相机以重新获得访问权限。
知道为什么第二次访问相机会导致这个问题,或者如何解决这个问题?
我已经确认相机确实已发布。我可以访问相机
我用 GStreamer 重新编译了 openCV - 它对多线程更友好。
我正在开发一个多线程应用程序来从四个 USB 网络摄像头捕获图像。为了简单和早期开发,我在 640x480 和 30fps 下使用罗技 C920。
我有一个简单的功能,打开相机并设置一些参数,然后释放相机。因为这是一个多线程应用程序,当按下一个按钮时,每个线程有四个线程 运行。效果很好。
def camParameter(previewName, camID):
#Set camera object and set parameters
start_time = time.time()
cam_test = True
while cam_test:
cam = cv2.VideoCapture(camID)
present_time = time.time()
if present_time - start_time > 2:
print("Could not open camera ", str(camID))
break
if cam.isOpened():
cam_test=False
width = 640
height = 480
fps = 30
test_width = cam.get(3)
test_height = cam.get(4)
test_fps = cam.get(5)
if test_width != width:
cam.set(3,width)
if test_height != height:
cam.set(4,height)
if test_fps != fps:
cam.set(5,fps)
print("Parameters set for camera ", str(camID))
cam.release()
但是,如果我再次调用该函数,或尝试打开摄像头进行流式传输,则会出现以下错误:
VIDEOIO ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV Unable to stop the stream: Device or resource busy
我可以使用 GUVCviewer 打开相机,或者 unplug/replug 相机以重新获得访问权限。
知道为什么第二次访问相机会导致这个问题,或者如何解决这个问题?
我已经确认相机确实已发布。我可以访问相机
我用 GStreamer 重新编译了 openCV - 它对多线程更友好。