rgb转化到hsv图像外观会变吗opencv

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rgb转化到hsv图像外观会变吗opencv相关的知识,希望对你有一定的参考价值。

opencv中的h分量范围是
0~180,
s分量是0~255,
v分量是0~255
但是hsv颜色空间却规定的是,h范围0~360,s范围0~1,v范围0~1
所以你需要自己转换一下,h*2,v/255,s/255
参考技术A 应该不会。
不管rgb还是hsv都只是色彩的表达方法。
可以用rgb颜色空间来表达,也可以用hsv颜色空间来表达。
实际上,不管你用哪种颜色表示方法,不同的人感受到的颜色是不同的。

基于内容的图像检索的直方图比较。不同的色彩空间(RGB、HSV 等)

【中文标题】基于内容的图像检索的直方图比较。不同的色彩空间(RGB、HSV 等)【英文标题】:Histogram comparation for Content Based Image Retrieval. Different color spaces (RGB,HSV,etc..) 【发布时间】:2011-12-29 02:03:10 【问题描述】:

我正在使用 OpenCv 完成基于内容的图像检索的最终学位项目。我已经开始比较直方图了。问题是我看到很多帖子说 RGB 是最糟糕的色彩空间操作,it's better to use HSV or YCrCb 。但是,当我将图像与 RGB 进行比较时,结果总是比使用其他色彩空间时要好。

这是 YCrCb 颜色的代码:

void Histogram::calculateYCCHist(const cv::Mat3b& img_base, const cv::Mat1b& mask)

cv::Mat3f ycbcr;
cvtColor( Mat3f(img_base), ycbcr, CV_BGR2YCrCb);
int hist_size[] = 100, 100, 100;
float y_range[] =  0, 1 ; // luma (Y) value have a nominal range from 0 to 1
float chr_range[] =  -0.5, 0.5 ; // chroma (CB and CR) values will have a nominal range from -0.5 to +0.5
const float* ranges_Y[] = y_range;
const float* ranges_Cb[] = chr_range;
const float* ranges_Cr[] = chr_range;
int channel_y[] = 0;
int channel_cb[] = 1;
int channel_cr[] = 2;

// Compute histogram
calcHist(&ycbcr, 1, channel_y, mask, m_histogram_b, 1, hist_size, ranges_Y, true, false);
normalize( m_histogram_b, m_histogram_b, 0, m_histogram_b.rows, NORM_MINMAX, -1, Mat() );
calcHist(&ycbcr, 1, channel_cb, mask, m_histogram_g, 1, hist_size, ranges_Cb, true, false);
normalize( m_histogram_g, m_histogram_g, 0, m_histogram_g.rows, NORM_MINMAX, -1, Mat() );
calcHist(&ycbcr, 1, channel_cr, mask, m_histogram_r, 1, hist_size, ranges_Cr, true, false);
normalize( m_histogram_r, m_histogram_r, 0, m_histogram_r.rows, NORM_MINMAX, -1, Mat() );
 

范围是否正确?

我对图像进行了标准化,但它根本没有改变任何东西。

你认为我应该尝试使用其他方法吗?

我还注意到 bin 的数量非常重要,如果更改此值,我会得到非常不同的结果,有什么方法可以控制吗?

问候

【问题讨论】:

我会说你想要学位文凭并且不知道如何控制直方图中的 bin 很奇怪......我的建议是首先了解一般的图像处理,以及你的主题特别是,开始一个非常简单的项目,学习如何编写你的 owm 直方图函数,然后继续 【参考方案1】:

我意识到这可能无法回答您的具体问题,而是您更一般的问题.... 老实说,每个色彩空间都彼此非常不同。根据我在算法中使用不同颜色空间的经验,通常需要更改算法的工作方式才能获得有用的结果。这方面的一个例子是 HSV 空间中的 H 通道如何是圆形的,即 100 = 0 的值,这不是 RGB 的情况。例如,在 YCbCr 中,如果您正在处理一种光照强度很重要的图像,则 Y 通道可能比 Cr 和 Cb 通道更强调/重要,或者如果您正在处理颜色而不考虑光照,则相反力量。

其次,当你说一种色彩空间比另一种更差时,你对每一种都是不公平的。它们各有其用途和局限性。 您链接到哪个空间更好的文章取决于“稳定性”。选择一个色彩空间而不是另一个色彩空间的原因有很多。

关于您关于 YCbCr 范围的具体问题...对不起,我不知道...我对此有点生疏。 :)

【讨论】:

感谢您的回复。在获取直方图之间的距离时,我尝试使用一些权重。但是,我在使用 HSV、Luv 和 YCrCb 时得到了不好的结果。我想我会继续使用 RGB。问候

以上是关于rgb转化到hsv图像外观会变吗opencv的主要内容,如果未能解决你的问题,请参考以下文章

python使用openCV加载图像并将BGR格式转换成HSV格式定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)并使用mask信息进行颜色分离BGR格式的图像转化为RGB并可视化

python使用openCV加载图像并将BGR格式转换成HSV格式定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)并使用mask信息进行颜色分离BGR格式的图像转化为RGB并可视化

从 RGB 到 HSV 的 OpenCV 图像转换

由RGB到HSV颜色空间的理解

python的skimage库 图像色彩空间转换 RGB到灰度;RGB到HSV

颜色空间