【发布时间】:2013-05-13 03:30:09
【问题描述】:
我正在使用opencv来实现对象跟踪。我读到 YUV 图像比 RGB 图像更适合使用。我的问题是,虽然我花了很多时间阅读笔记,但我对 YUV 格式并不了解。 Y 是我认为是根据 R、G、B 分量的组合计算得出的亮度。
我的主要问题是如何访问和操作 YUV 图像格式的像素。在 RGB 格式中,它很容易访问组件,因此可以使用简单的操作来更改它,例如
src.at<Vec3b>(j,i).val[0] = 0; for example
但在 YUV 中情况并非如此。我需要帮助来访问和更改 YUV 图像中的像素值。例如,如果 RGB 中的像素是红色的,那么我只想在 YUV 中保留相应的像素,其余的被删除。请帮我解决这个问题。
【问题讨论】:
-
在什么情况下,YUV 优于 RGB?如果要过滤红色像素,我推荐 RGB(用于简单图像)或 HSV(用于自然图像)。
-
因为照片的照明很多不同,所以我认为 YUV 可能是一个更好的选择
-
大多数相机实际上在 YCbCr 中捕获(非常相似,有时被视为与 YUV 相同),因此如果您使用 OpenCV 正确设置相机控件,则可以直接访问此 YCbCr 图像。我现在正在开发一个在图像中进行对象检测的系统,到目前为止,我们发现在 HSV 颜色空间中标记图像是最成功的。我读过 LAB 空间也可以提供良好的结果,具体取决于问题。
-
@DrewNoakes 用于对象检测的图像处于受控环境或不受控环境
-
我的理解是,大多数相机使用 YUV,因为人眼对亮度(亮度)的变化比对色度(颜色)的变化更敏感。计算机视觉系统可能并不关心这一点。无论如何,在 HSV 空间中,您会发现“相似”颜色往往比它们在 RGB 中更接近。或者换一种说法,HSV 中两种颜色之间的 3D 距离比 RGB 更接近人类的理解。
标签: c++ opencv image-processing yuv