【发布时间】:2015-02-14 07:06:08
【问题描述】:
我尝试使用 openCV/c++ 从 LI-USB30_V024 立体相机捕获左右图像,而不自动将其转换为 RGB。相机输出 YUYV 格式的图像。
我曾尝试使用 videoCapture.set(CV_CAP_PROP_CONVERT_RGB, false) 但我收到消息“HIGHGUI ERROR: V4L: Property (16) not supported by device”。
我想避免转换为 RGB 的原因是因为相机将左右视频一起打包成一个 YUYV 图像。两台相机都是单色的,据我所知,左图像信息在 Y 通道中编码,而右图像信息在 U 和 V 通道中编码。例如,如果我运行 guvcview,我会得到一个包含叠加的左右图像的单个图像。它看起来像一张黑白图像(左侧图像在 Y 通道中编码),顶部是绿色和粉红色图像(右侧相机在 UV 通道中编码)。我知道这听起来很不寻常,所以如果您对此有任何其他想法/问题,请不要犹豫。
我的目标是将图像捕获为 YUYV,以便我可以使用 split() 将左图像(Y 通道)与右图像(U 和 V 通道)分开并将它们都显示为单色图像。然而,一旦图像被转换为 RGB,亮度和色度通道就会混合在一起,并且不可能将两个图像分开。
综上所述,我需要在不将其转换为 RGB 的情况下捕获视频,以便保留 YUYV 格式。这将允许我将左右图像分开。
OR 我需要一种分别捕获左右图像的方法,但我认为这不太可能。
我认为这在 v4l 中是可能的,但我宁愿只在可能的情况下使用 openCV。
谢谢!
【问题讨论】:
-
所以你想让它转换成黑白?
-
或者你想直接把它读成灰度
-
再转换回 yuv 不行吗?
-
我尝试过转换回 YUV 并拆分通道,但效果不佳。从 Y 通道形成的图像主要是左图像,但仍然有这些从右图像遗留下来的幽灵形状(另一张图像反之亦然)。我有一些想法为什么会这样。首先,openCV 将图像转换为不同类型的 YUV。我不确切知道它是哪一个,但只有三个通道而不是四个。其次,YUYV->RGB转换是否会丢失一些信息或不可逆地混合亮度和色度信息?
-
我刚刚尝试使用以下公式转换回 YUYV:Y = 0.299R+0.587G+0.114B。我只找到了每个像素的 Y 值,因为这足以仅查看左侧图像。然而,仍然有来自右侧摄像头的残留重影图像。要么我的转换错误,要么 YUYV->RGB 转换不可逆。我在这里得到了公式fourcc.org/fccyvrgb.php
标签: c++ image opencv camera v4l2