首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么OpenCV RGB到YCbCr的转换没有给出与使用ycbcr2rgb函数在ycbcr2rgb中的转换结果相同的结果?

为什么OpenCV RGB到YCbCr的转换没有给出与使用ycbcr2rgb函数在ycbcr2rgb中的转换结果相同的结果?
EN

Stack Overflow用户
提问于 2019-04-10 07:07:11
回答 1查看 906关注 0票数 2

我正在尝试用OpenCV将我的matlab代码复制到C中。这里我有一个步骤,我需要将图像从rgb转换为ycbcr并进行直方图均衡化。但两者在matlab和C语言中的结果却有很大的不同。

我正在使用Matlab R2016b和OpenCV 4.0.0

哪一种方法是正确的,为什么我看到这种不同?

以下是我在MATLAB和C语言中所遵循的步骤:

C步骤:

  1. 使用imread()读取RGB中的图像帧
  2. 使用cv::cvtColor()将RGB图像转换为YCBCr
  3. 检查Y通道的值 cv::Mat image, ycbcr; vector splitted; image = imread("image_name.jpg"); cv::cvtColor(image, ycbcr, COLOR_BGR2YCrCb); cv::split(ycbcr, splitted) cv::equalizeHist(splitted[0],splitted[0]); cv::merge(dst_host,ycbcr); cv::cvtColor(ycbcr, image, COLOR_YCrCb2BGR); imshow("Equalized", image);

MATLAB步骤:

  1. 使用imread()读取RGB中的图像帧
  2. 使用YCBCr ()将RGB映像转换为rgb2ycbcr
  3. 检查Y通道的值 im = imread('image_name.jpg'); ycbcr_im = rgb2ycbcr(im); ycbcr_im(:,:,1) = histeq(ycbcr_im(:,:,1)); im = ycbcr2rgb(ycbcr_im); imshow(im);

因此,我在OpenCV和MATLAB中检查了从rgb到ycbcr的转换结果,结果在转换本身上是不同的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-10 07:25:16

通过查看OpenCV和Matlab的文档颜色转换。我找到了下面的东西。在我的观察中,算法和实现有很大的不同。

在Matlab中,rgb2ycbcr()函数将数字公式中的颜色转换为

代码语言:javascript
复制
Y = 16+ (65.481 * R + 128.553 * G + 24.966 * B)
Cb = 128+ (-37.797 * R - 74.203 * G + 112.0 * B)
Cr = 128+ (112.0 * R - 93.786 * G - 18.214 * B)

如果输入为uint8,则YCBCR为uint8,其中Y在16235范围内,Cb和Cr在16240范围内。

但是在OpenCV中,转换是用模拟公式进行的,

代码语言:javascript
复制
Y = 0.299 * R+ 0.587 * G+ 0.114 * B
Cb = -0.168736 * R - 0.331264 * G + 0.5 * B
Cr = 0.5 * R - 0.418688 * G - 0.081312 * B

如果输入为uint8,则YCBCR为uint8,其中Y、Cb和Cr在0 255范围内。这就是为什么你会得到一个不同的结果。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55606636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档