我尝试使用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。
谢谢!
答案 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);