OpenCV视频篇——YCrCb与YUV
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV视频篇——YCrCb与YUV相关的知识,希望对你有一定的参考价值。
参考技术A在HEVC标准中,RGB空间首先在encoder(编码)处,被转换为YCbCr颜色空间作为输入,经过压缩,最后还原成图像时,再次转换回RGB空间(值得注意的是,标准化软件中并不提供这个转换的功能,这是属于Preprocessing(在encoder)或者Proprocessing (在decoder))。
HEVE压缩是针对YUV颜色空间。YUV颜色空间中的Y代表luminance,表示灰阶度。U和V代表chrominance,表示色度,作用是描述影像色彩及饱和度,用于指定像素的颜色。
YCbCr中,Y就是luminance,明亮。C就是Chrominance,色度。Cb就是blue和green的色度。Cr就是red和green的色度。
对于光来说,人眼对于光的亮度特别敏感。相比,对光的色彩分量和位置与移动相对来说比较弱。
YCbCr采样方式:
🌻 “U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。 “色度”则定义了颜色的两个方面——色调与饱和度,分别用Cr和Cb来表示 。
YUV 和 Y,Cr,Cb对于数字电路而言:
🤍 YUV 和 Y,Cr,Cb只是相差128。
🤍 YUV没有负值,Y,Cr,Cb最高位为符号位,U = Cr + 128;V = Cb +128
OpenCV 从 YUYV 像素格式视频帧创建 YUV420 或灰度 Mat 对象
【中文标题】OpenCV 从 YUYV 像素格式视频帧创建 YUV420 或灰度 Mat 对象【英文标题】:OpenCV create YUV420 or grayscale Mat object from YUYV pixelformat video frame 【发布时间】:2019-03-15 07:05:53 【问题描述】:我正在尝试处理来自 Qt 应用程序的视频帧。 QML 相机的输入格式为 YUYV,默认情况下我无法将其设置为 YUV420 之类的其他格式。我需要捕获帧并创建一个 YUV420 或灰度格式的 Mat 对象。
我用以下代码尝试了 cvtColor,但它们在运行时都崩溃了 - COLOR_YUV2GRAY_YVY 颜色_YUV2RGB_YUYV COLOR_YUV2GRAY_YUYV
知道我该怎么做吗?
【问题讨论】:
你能显示运行时产生的错误吗?您使用的代码也将非常有用;) 【参考方案1】:所以在玩弄了一些颜色转换代码之后,这就是我发现对我有用的解决方案。
cv::Mat img = cv::Mat(m_videoHeight, m_videoWidth, CV_8UC2, input->bits());
cv::Mat gray;
cv::cvtColor(img, gray, cv::COLOR_YUV2GRAY_YVYU);
这会将给定的 YUYV Mat 对象 - img 转换为灰度 Mat 对象 - 灰色。 input->bits() 指的是视频帧缓冲区的第一位。
【讨论】:
以上是关于OpenCV视频篇——YCrCb与YUV的主要内容,如果未能解决你的问题,请参考以下文章