OpenCV从没有RGB转换的相机捕获YUYV

时间:2014-12-16 02:45:29

标签: c++ image opencv camera v4l2

我尝试使用openCV / c ++从LI-USB30_V024立体相机捕捉左右图像,而不会自动将其转换为RGB。相机以YUYV格式输出图像。

我尝试过使用videoCapture.set(CV_CAP_PROP_CONVERT_RGB,false),但收到消息“HIGHGUI ERROR:V4L:Property(16)不支持设备”。

我想避免转换为RGB的原因是因为相机将左右视频一起打包到单个YUYV图像中。两个相机都是单色的,据我所知,左图像信息在Y通道中编码,而右图像在U和V通道中编码。例如,如果我运行guvcview,我会得到一个包含左右图像叠加的单个图像。它看起来像一个黑白图像(左图像在Y通道中编码),顶部是绿色和粉红色图像(右侧相机在UV通道中编码)。我知道这听起来很不寻常,所以如果您对此有任何其他想法/问题,请不要犹豫。

我的目标是将图像捕获为YUYV,以便我可以使用split()将左图像(Y通道)与右图像(U和V通道)分开,并将它们显示为单色图像。然而,一旦图像被转换为​​RGB,亮度和色度通道就会混合在一起,并且不可能将两个图像分开。

总结一下,我需要捕获视频而不将其转换为RGB,以便保留YUYV格式。这样我就可以分开左右图像了。

OR 我需要一种分别捕捉左右图像的方法,但我认为这不太可能。

我认为这在v4l中是可行的,但如果可能的话,我宁愿只使用openCV。

谢谢!

3 个答案:

答案 0 :(得分:3)

我认为在openCV中有一种方法可以做到这一点。最后用V4L2捕获帧并将它们存储在openCV Mats中并不会太麻烦。

答案 1 :(得分:0)

我曾经在生产YUV420数据的相机上晃动,并且在配置它时遇到了一些问题。但这个功能对我有用。

  

videoCapture.set(CV_CAP_PROP_CONVERT_RGB,0)

您可以检查是否存在导致问题的其他配置。

答案 2 :(得分:-2)

在标题文件 slow_query_ignore

// Generic camera output modes.
// Currently, these are supported through the libv4l interface only.
enum { CAP_MODE_BGR  = 0, // BGR24 (default)
       CAP_MODE_RGB  = 1, // RGB24
       CAP_MODE_GRAY = 2, // Y8
       CAP_MODE_YUYV = 3  // YUYV
     };

用法:

cv::VideoCapture camera = cv::VideoCapture();
camera.open(0);
camera.set(CV_CAP_PROP_MODE, CV_CAP_MODE_YUYV);