Pythonを使用してopencvのCameraCaptureを再度開こうとすると、次のようになります。
libv4l2: error setting pixformat: Device or resource busy
HIGHGUI ERROR: libv4l unable to ioctl S_FMT
libv4l2: error setting pixformat: Device or resource busy
libv4l1: error setting pixformat: Device or resource busy
HIGHGUI ERROR: libv4l unable to ioctl VIDIOCSPICT
私のアプリケーションはPyQtや他のさまざまなモジュールを使用してより大きなコンテキストで実行されますが、問題を特定することができました。したがって、「r」(リロード)を押すと、キャプチャオブジェクトは削除されますが、カメラがまだアクティブであるため、カメラへの接続を再度開くことができません。
#!/usr/bin/env python
from opencv.cv import *
from opencv.highgui import *
import sys
import time
import gc
cvNamedWindow("w1", CV_WINDOW_AUTOSIZE)
camera_index = 1
capture = cvCreateCameraCapture(camera_index)
def repeat():
global capture #declare as globals since we are assigning to them now
global camera_index
frame = cvQueryFrame(capture)
cvShowImage("w1", frame)
c = cvWaitKey(10)
if c == "q":
sys.exit(0)
if c == "r":
print 'reload'
#del frame
del capture
# pretty useless sleeping, garbage collecting, etc.
#gc.collect()
#import pdb; pdb.set_trace()
#print gc.get_objects()
#print gc.DEBUG_UNCOLLECTABLE
#time.sleep(2)
capture = cvCreateCameraCapture(camera_index)
if __name__ == "__main__":
while True:
repeat()
同様の質問に与えられたヒントは私には機能しませんでした: Pythonを使用しているときにopencvでReleaseCaptureを見つけることができませんか?および/またはOpenCV/アレイはCvMatまたはIplImage/キャプチャオブジェクトのリリースである必要があります