gpt4 book ai didi

OpenCV 显示彩色 Cb Cr channel

转载 作者:太空宇宙 更新时间:2023-11-03 22:56:06 25 4
gpt4 key购买 nike

所以我了解了如何使用 cvtColor() 将 BGR 图像转换为 YCrCb 格式,并在 OpenCV 中使用 split() 或 mixChannels() 分离不同的 channel 。但是,这些 channel 显示为灰度图像,因为它们是 CV_8UC1 Mats。

我想用颜色显示 Cb 和 Cr channel Barns image on Wikipedia .我找到了这个 solution in Matlab , 但我如何在 OpenCV 中做到这一点?

此外,mentioned solution通过“用 50% 的恒定值填充其他 channel ”来显示 Cb 和 Cr channel 。我的问题是:

这是显示 Cr Cb channel 的常用方式吗?或者显示Cr Cb channel 时有什么建议或规范吗?

最佳答案

我按照 answer 中的描述从头开始编写代码.看起来这就是您所需要的。

Mat bgr_image = imread("lena.png");

Mat yCrCb_image;
cvtColor(bgr_image, yCrCb_image, CV_BGR2YCrCb);

Mat yCrCbChannels[3];
split(yCrCb_image, yCrCbChannels);

Mat half(yCrCbChannels[0].size(), yCrCbChannels[0].type(), 127);
vector<Mat> yChannels = { yCrCbChannels[0], half, half };
Mat yPlot;
merge(yChannels, yPlot);
cvtColor(yPlot, yPlot, CV_YCrCb2BGR);
imshow("y", yPlot);

vector<Mat> CrChannels = { half, yCrCbChannels[1], half };
Mat CrPlot;
merge(CrChannels, CrPlot);
cvtColor(CrPlot, CrPlot, CV_YCrCb2BGR);
imshow("Cr", CrPlot);

vector<Mat> CbChannels = { half, half, yCrCbChannels[2] };
Mat CbPlot;
merge(CbChannels, CbPlot);
cvtColor(CrPlot, CrPlot, CV_YCrCb2BGR);
imshow("Cb", CbPlot);
waitKey(0);

enter image description here

至于将灰度图像转换为彩色格式,通常在这种情况下所有颜色 channel (B、G、R)都设置为一个灰度值。在以这种方式实现的 OpenCV CV_GRAY2BGR 模式中。

至于“用 50% 的常数值填充其他 channel ”,我认为这是可视化 YCbCr 和 Lab 等颜色空间的常用方法。我没有找到任何关于这种方法的文章和描述,但我认为它是由可视化目的驱动的。确实,如果我们将其他 channel 填充为零,基本上没有任何变化:我们也可以看到每个 channel 的影响,但图片看起来不太好看:

enter image description here

因此,这种方法的目的是使可视化更加丰富多彩。

关于OpenCV 显示彩色 Cb Cr channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30253719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com