OpenCV VideoCapture :: set()返回false但成功

时间:2013-11-22 02:36:00

标签: c++ python linux opencv image-capture

我在Kubuntu 12.04上使用OpenCV 2.4.6同时使用C ++和Python。使用Logitech Quick Cam Pro 3000网络摄像头,我成功设置了帧大小,但VideoCapture::set()始终返回 false

// C++
VideoCapture lCap( 0 );

cout << lCap.get( CV_CAP_PROP_FRAME_WIDTH ) << endl;
cout << lCap.get( CV_CAP_PROP_FRAME_HEIGHT ) << endl;
cout << boolalpha << lCap.set( CV_CAP_PROP_FRAME_WIDTH, 320 ) << endl;
cout << boolalpha << lCap.set( CV_CAP_PROP_FRAME_HEIGHT, 240 ) << endl;
cout << lCap.get( CV_CAP_PROP_FRAME_WIDTH ) << endl;
cout << lCap.get( CV_CAP_PROP_FRAME_HEIGHT ) << endl;

给出:

640
480
false
false
320
240

# Python 2.7
Cap = cv2.VideoCapture( 0 )
print( Cap.get( CV_CAP_PROP_FRAME_WIDTH ) )
print( Cap.get( CV_CAP_PROP_FRAME_HEIGHT ) )
print( Cap.set( CV_CAP_PROP_FRAME_WIDTH, 320 ) )
print( Cap.set( CV_CAP_PROP_FRAME_HEIGHT, 240 ) )
print( Cap.get( CV_CAP_PROP_FRAME_WIDTH ) )
print( Cap.get( CV_CAP_PROP_FRAME_HEIGHT ) )

也给出了同样的东西。

所以我想知道这种行为是否正常(OpenCV或libs V4L,V4L2 ???或我的网络摄像头)。如果是这样,我可以在get()后执行set()检查我的尝试。但如果出现问题,我想知道。

请参阅文档:Doc for VideoCapture::set(), OpenCV 2.4.6

谢谢!

1 个答案:

答案 0 :(得分:1)

我在我的Logitech c270网络摄像头上尝试了相同的操作,它运行正常,也返回了真实状态。我猜这个问题是网络摄像头驱动程序的错误。

尝试安装正式的Logitech驱动程序,如果你还没有这样做(我注意到我的网络摄像头,安装官方驱动程序也会使OpenCV中的捕获速度提高约10倍)。