C++ 在c+;中使用OpenCV设置gstreamer capsfilter+;

C++ 在c+;中使用OpenCV设置gstreamer capsfilter+;,c++,opencv,webcam,gstreamer,frame-rate,C++,Opencv,Webcam,Gstreamer,Frame Rate,有了GuvView中的Microsoft LifeCam影院(Ubuntu上),我在1280x720上的速度达到了30帧。在我的OpenCV程序中,我只得到10fps(只有queryframe和showimage,没有进行图像处理)。我发现这是一个错误。一个解决方案是在gstreamer中设置capsfilter,在terminal I中可以这样做: gst-launch v4l2src device=/dev/video0 ! 'video/x-raw-yuv,width=1280,heigh

有了GuvView中的Microsoft LifeCam影院(Ubuntu上),我在1280x720上的速度达到了30帧。在我的OpenCV程序中,我只得到10fps(只有
queryframe
showimage
,没有进行图像处理)。我发现这是一个错误。一个解决方案是在gstreamer中设置capsfilter,在terminal I中可以这样做:

gst-launch v4l2src device=/dev/video0 !
'video/x-raw-yuv,width=1280,height=720,framerate=30/1' ! xvimagesink
这管用!问题是:

  • 如何在我的c++/OpenCV程序中实现这一点
  • 或者是否可以将gstreamer设置为始终使用此capsfilter

  • 我已经找到了这个问题,但我无法使用网络摄像头解决它。

    不幸的是,无法设置从摄像头检索到的帧的格式(YUV),但对于其余设置,您可以尝试使用:


    如果设置帧大小不起作用,我强烈建议您阅读以下帖子:

    我的坏,我将网络摄像头设置为1280x800,这迫使它使用YUVY,最高每秒10帧。在我的程序中将其设置回1280x720会给我30 fps

    谢谢,但是CV_CAP_PROP_fps在OpenCV中是一个不起作用的函数。此外,这不是OpenCV的问题,而是gstreamer的问题(请参阅错误报告),如果上述方法不起作用,那么您就倒霉了。您将无法通过OpenCV设置管道配置。
    cvSetCaptureProperty(capture, CV_CAP_PROP_FPS, 30);
    cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 1280);
    cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 720);