Opencv 在 cv::Mat 中存储 Yuyv (YCrCb)

Posted

技术标签:

【中文标题】Opencv 在 cv::Mat 中存储 Yuyv (YCrCb)【英文标题】:Opencv storing Yuyv (YCrCb) in cv::Mat 【发布时间】:2013-07-01 12:10:31 【问题描述】:

我从网络摄像头获取的数据是 yuv422。我想将此 yuv422 存储到 cv::Mat 中而不将其转换为 RGB...这可能吗?

谢谢。

【问题讨论】:

如果您可以直接访问框架,您可以使用 *data 成员扭曲 Mat 中的数据。 cv::Mat 是泛型类型,不是严格意义上的 RGB。 【参考方案1】:

考虑到色度二次采样,如果您将YUYV 数据解压缩到YUV 矩阵(3 个通道的 8 位数据)中,然后使用cv::inRange 等执行过滤,它可能会更简单。您只需需要为每个 Y 插值 U 和 V 样本。

另一种选择是将矩阵视为 8 位数据的 4 个通道,然后在您的过滤器结果中,合并来自两个 Y 样本通道的结果。

【讨论】:

【参考方案2】:

是的,只需创建一个 3 通道矩阵。请看basic Mat tutorial

【讨论】:

基本上,我想做的是在 yuv422 数据上使用cv::inRange;但是,由于数据是 422,我不太确定如何做到这一点。此外,我不认为我想要 3 通道而是两个通道,因为数据存储为 Y0U Y1V。 然后创建一个双通道垫。关于如何使用 Mat 对象的文档非常好。 是的,我做到了...但是我不能真正使用 cv::inRange 函数,因为每个奇数 nybble 代表 UV,每个偶数 nybble 代表 Y。你知道是否有办法存储图像以便我可以使用opencv函数(例如cv::inRange)?我想知道是否有某种方法可以告诉opencv数据是yuv422,因为如果它不知道,所有方法都不起作用。

以上是关于Opencv 在 cv::Mat 中存储 Yuyv (YCrCb)的主要内容,如果未能解决你的问题,请参考以下文章

【OPENCV】cv::Mat像素遍历方法比较

OpenCV Mat 数据成员访问

opencv 访问 CV_32FC3 BGR cv::Mat 的颜色元素

为 svm::predict 准备 cv::mat

OpenCV 使用 stride 从数组生成 cv::Mat

将 Cv::Mat 的数据存储在 std::vector 中