opencv,图像处理,rgb转换为hsv空间
2017-03-06 22:37
316 查看
图像RGB空间转换为HSV空间。
H参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别相隔120度。互补色分别相差180度。
纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。S=0时,只有灰度。
V表示色彩的明亮程度,范围从0到1。有一点要注意:它和光强度之间并没有直接的联系。
1: max=max(R,G,B)
2: min=min(R,G,B)
3: if R = max, H = (G-B)/(max-min)
4: if G = max, H = 2 + (B-R)/[b](max-min)
5: if B = max, H = 4 + (R-G)/(max-min)
6:
7: H = H * 60
8: if H < 0, H = H + 360
9:
10: V=max(R,G,B)
11: S=(max-min)/max
代码为:
//转换为HSV
void Rgb2Hsv(Mat &image, Mat &hsv)
{
float maxV = 0,minV = 0;
float V = 0, S = 0, H = 0;
float v = 0, s = 0, h = 0;
float R = 0, G = 0, B = 0;
float delta = 0, tmp = 0;
for (int i = 0; i < image.rows; i++)
{
for (int j = 0; j < image.cols; j++)
{
R = image.at<Vec3b>(i, j)[0];
G = image.at<Vec3b>(i, j)[1];
B = image.at<Vec3b>(i, j)[2];
R = R / 255.0;
B = B / 255.0;
G = G / 255.0;
tmp = min(R, G);
minV = min(tmp, B);
tmp = max(R, G);
maxV = max(tmp, B);
V = maxV; // v
delta = maxV - minV;
if (maxV != 0)
S = delta / maxV; // s
else
{
S = 0;
}
if (R == maxV)
H = (G - B) / delta;
else if (G == maxV)
H = 2 + (B - R) / delta;
else
H = 4 + (R - G) / delta;
H *= 60;
if (H < 0)
H += 360;
h = H / 2;
s = S * 255.0;
v = V * 255.0;
hsv.at<Vec3b>(i, j).val[0] = h;
hsv.at<Vec3b>(i, j).val[1] = s;
hsv.at<Vec3b>(i, j).val[2] = v;
}
}
}
H参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别相隔120度。互补色分别相差180度。
纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。S=0时,只有灰度。
V表示色彩的明亮程度,范围从0到1。有一点要注意:它和光强度之间并没有直接的联系。
1: max=max(R,G,B)
2: min=min(R,G,B)
3: if R = max, H = (G-B)/(max-min)
4: if G = max, H = 2 + (B-R)/[b](max-min)
5: if B = max, H = 4 + (R-G)/(max-min)
6:
7: H = H * 60
8: if H < 0, H = H + 360
9:
10: V=max(R,G,B)
11: S=(max-min)/max
代码为:
//转换为HSV
void Rgb2Hsv(Mat &image, Mat &hsv)
{
float maxV = 0,minV = 0;
float V = 0, S = 0, H = 0;
float v = 0, s = 0, h = 0;
float R = 0, G = 0, B = 0;
float delta = 0, tmp = 0;
for (int i = 0; i < image.rows; i++)
{
for (int j = 0; j < image.cols; j++)
{
R = image.at<Vec3b>(i, j)[0];
G = image.at<Vec3b>(i, j)[1];
B = image.at<Vec3b>(i, j)[2];
R = R / 255.0;
B = B / 255.0;
G = G / 255.0;
tmp = min(R, G);
minV = min(tmp, B);
tmp = max(R, G);
maxV = max(tmp, B);
V = maxV; // v
delta = maxV - minV;
if (maxV != 0)
S = delta / maxV; // s
else
{
S = 0;
}
if (R == maxV)
H = (G - B) / delta;
else if (G == maxV)
H = 2 + (B - R) / delta;
else
H = 4 + (R - G) / delta;
H *= 60;
if (H < 0)
H += 360;
h = H / 2;
s = S * 255.0;
v = V * 255.0;
hsv.at<Vec3b>(i, j).val[0] = h;
hsv.at<Vec3b>(i, j).val[1] = s;
hsv.at<Vec3b>(i, j).val[2] = v;
}
}
}
相关文章推荐
- C++ OpenCV 实现RGB彩色图像转化成灰度图像再转换成二值图像
- 图像处理之基础---yuv420及其rgb,bayer, yuv, RGB的相互转换详解
- javaCV图像处理之Frame、Mat和IplImage三者相互转换(使用openCV进行Mat和IplImage转换)
- 【OpenCV3图像处理】颜色空间转换(一)颜色空间分类总结
- 5-python图像处理opencv(1.读图,显示,转换,存储)
- Delphi图像处理 -- RGB与HSV转换
- 【VS开发】【图像处理】 bayer, yuv, RGB转换方法
- 【OpenCV】颜色空间(RGB,HSV与Gray)及图像处理中的颜色识别
- 【图像处理与医学图像处理】YUV与RGB格式转换速度几种方法对比
- 数字图像处理 颜色空间RGB、HSI、CMYK、YUV的相互转换
- 数字图像处理 颜色空间RGB、HSI、CMYK、YUV的相互转换
- 【opencv+python】图像处理之一、颜色空间RGB,Gray与HSV
- 基于mfc数字图像处理的小软件pdd-转换图片成RGB通道,反色,黑白,灰度图片
- opencv常用转换 opencv图像处理
- opencv for python 之 图像处理 阀值转换 侵蚀
- 图像处理之基础---用Shader实现的YUV到RGB转换:使用3重纹理实现 .
- 【OpenCV学习笔记】3.1 RGB图像转换为HSI图像
- 【OpenCV图像处理】IplImage转换灰度图像及Cvmat与IplImage格式之间的相互转换
- OpenCV 读RGB图像然后转换成灰度并保存成灰度图
- opencv中Iplimage类的图像与matlab中rgb图像的相互转换