Python OpenCV - VideoCapture.release() 在 Linux 中不起作用



我使用的是OpenCV 2.4.9和Python 2.7.11。

我写了一个小程序,显示相机输出,当按下"q"时,关闭相机,但不退出应用程序(为了进一步的工作…)

问题是,网络摄像头并没有真正释放,LED一直亮着,当我再次尝试打开它时,它会说资源很忙,直到我完全退出程序。不过,它在Windows中确实可以正常工作。。。

这是代码:

import cv2
import sys

cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    if frame is None:
        print "BYE"
        break
    cv2.imshow('frame', frame)    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break       
cap.release()
cv2.destroyAllWindows()
while True:
    cv2.waitKey(1)

我错过了什么?有没有办法在不退出程序的情况下释放相机?提前感谢

释放相机(不退出)的方法实际上是释放()。我已经在Linux Mint 18(64位)环境中测试了您的代码,该环境运行OpenCV 2.4.13和带有Python 2.7.12的OpenCV 3.1。没有任何问题。

以下是您查看代码中发生了什么的方法:

import cv2
import sys
#print "Before cv2.VideoCapture(0)"
#print cap.grab()
cap = cv2.VideoCapture(0)
print "After cv2.VideoCapture(0): cap.grab() --> " + str(cap.grab()) + "n"
while True:
    ret, frame = cap.read()
    if frame is None:
        print "BYE"
        break
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
print "After breaking, but before cap.release(): cap.grab() --> " + str(cap.grab()) + "n"
cap.release()
print "After breaking, and after cap.release(): cap.grab() --> " + str(cap.grab()) + "n"
cap.open(0)
print "After reopening cap with cap.open(0): cap.grab() --> " + str(cap.grab()) + "n"
cv2.destroyAllWindows()
while True:
    cv2.waitKey(1)

您可能需要考虑在系统上重新安装OpenCV。我建议您查看PyImageSearch上的精彩指南-->http://www.pyimagesearch.com/opencv-tutorials-resources-guides/

如果有帮助,请告诉我

我也遇到了同样的问题。默认情况下,我的OpenCV构建使用Gstreamer作为VideoCapture()的后端。如果我强迫它使用V4L2,例如

cap = VideoCapture(0,cv2.CAP_V4L2)

cap.release()成功。

Gstreamer后端应该能够关闭它打开的任何管道(请参阅此处的源代码:https://github.com/opencv/opencv/blob/master/modules/videoio/src/cap_gstreamer.cpp),但对于我的后端无关应用程序来说,避免这个问题比解决这个问题更容易。

相关内容

  • 没有找到相关文章

最新更新