目錄
1 RGB 的局限性
2 HSV 顏色空間
3 RGB與HSV相互轉換
4 HSV顏色模型對圖像的色相、飽和度和明度進行調節
5 演示Demo
5.1 開發環境
5.2 功能介紹
5.3 下載地址
參考
1 RGB 的局限性
????????RGB 是我們接觸最多的顏色空間,由三個通道表示一幅圖像,分別為紅色(R),綠色(G)和藍色(B)。這三種顏色的不同組合可以形成幾乎所有的其他顏色。
????????RGB 顏色空間是圖像處理中最基本、最常用、面向硬件的顏色空間,比較容易理解。
????????RGB 顏色空間利用三個顏色分量的線性組合來表示顏色,任何顏色都與這三個分量有關,而且這三個分量是高度相關的,所以連續變換顏色時并不直觀,想對圖像的顏色進行調整需要更改這三個分量才行。
????????自然環境下獲取的圖像容易受自然光照、遮擋和陰影等情況的影響,即對亮度比較敏感。而 RGB 顏色空間的三個分量都與亮度密切相關,即只要亮度改變,三個分量都會隨之相應地改變,而沒有一種更直觀的方式來表達
????????但是人眼對于這三種顏色分量的敏感程度是不一樣的,在單色中,人眼對紅色最不敏感,藍色最敏感,所以 RGB 顏色空間是一種均勻性較差的顏色空間。如果顏色的相似性直接用歐氏距離來度量,其結果與人眼視覺會有較大的偏差。對于某一種顏色,我們很難推測出較為精確的三個分量數值來表示。所以,RGB 顏色空間適合于顯示系統,卻并不適合于圖像處理。
2 HSV 顏色空間
????????基于上述理由,在圖像處理中使用較多的是 HSV 顏色空間,它比 RGB 更接近人們對彩色的感知經驗。非常直觀地表達顏色的色調、鮮艷程度和明暗程度,方便進行顏色的對比。
????????在 HSV 顏色空間下,比 RGB 更容易跟蹤某種顏色的物體,常用于分割指定顏色的物體。
????????HSV 表達彩色圖像的方式由三個部分組成:
-
Hue(色調、色相),相當于基調,是下圖的俯視圖得到的圓,圓上不同位置的顏色基調不同,把顏色分成了360°,每個位置有不同的顏色基調;
-
Saturation(飽和度、色彩純凈度):純度,沿著俯視圖得到的圓的半徑看,因為圓弧上的點代表該處的顏色的基調,那么半徑上就是從純白色到該基調顏色過渡過程中不同位置的純度,在圓心處純度為0,在圓弧上(該色調)純度為100;
-
Value(明度):亮度,沿著圓柱的高來看,圓柱表面上平行于圓柱軸上的點的顏色基調相同,純度也相同,但是明暗程度不同。同時,該圓柱的半徑也不同,相當于磁盤的柱面。
????????用下面這個圓柱體來表示 HSV 顏色空間,圓柱體的橫截面可以看做是一個極坐標系 ,H 用極坐標的極角表示,S 用極坐標的極軸長度表示,V 用圓柱中軸的高度表示。
-
色相H:表示色彩信息,即所處的光譜顏色的位置。該參數用一角度量來表示,取值范圍為0°~360°。其中0°為紅色,60°為黃色,120°為綠色,180°為青色,240°為藍色,300°為紫色。
-
飽和度S:表示色彩的純度,取值范圍為0.0~1.0。值越大,純度越高,接近光譜色的程度也就越高,圖像越鮮艷。
-
明度V:表示色彩的明亮程度,取值范圍為0.0(黑色)~1.0(白色)。明度越高,色彩越亮。
3 RGB與HSV相互轉換
????????了解了HSV的顏色特性之后,就可以在實際使用中RGB顏色值轉換為HSV顏色值,然后對色相、飽和度和明度進行調整。達到效果需求之后,再轉換為RGB值顯示在屏幕上保存結果。
????????下面使用C語言編程實現RGB與HSV的轉換
#include"TRGB2HSV.h"
#include"Commen.h"
#include<stdlib.h>
#include<math.h>void RGB2HSV(unsigned char R, unsigned char G, unsigned char B, float* h, float* s, float * v)
{float min, max;float r = R / 255.0;float g = G / 255.0;float b = B / 255.0;min = MIN2(r,MIN2(g,b));max = MAX2(r,MAX2(g,b));if (max == min)*h = 0;else if (max == r && g >= b)*h = 60.0 * (g - b) / (max - min);else if (max == r && g < b)*h = 60.0 * (g - b) / (max - min) + 360.0;else if (max == g)*h = 60.0 * (b - r) / (max - min) + 120.0;else if (max == b)*h = 60.0 * (r - g) / (max - min) + 240.0; *h = CLIP3(*h, 0, 360);if (max == 0)*s = 0;else*s = (max - min) / max;*v = max;
};void HSV2RGB(float h, float s, float v, unsigned char* R, unsigned char *G, unsigned char *B)
{float q = 0, p = 0, t = 0, f = 0, r = 0, g = 0, b = 0;int hN = 0;if(h == 360)h = 0;if (h < 0)h = 360 + h;hN = (int)((int)h / 60);f = h / 60.0f - hN;p = v * (1.0 - s);q = v * (1.0 - f * s);t = v * (1.0 - (1.0 - f) * s);switch (hN){case 0:r = v;g = t;b = p;break;case 1:r = q;g = v;b = p;break;case 2:r = p;g = v;b = t;break;case 3:r = p;g = q;b = v;break;case 4:r = t;g = p;b = v;break;case 5:r = v;g = p;b = q;break;default:break;}*R = (unsigned char)CLIP3((r * 255.0),0,255);*G = (unsigned char)CLIP3((g * 255.0),0,255);*B = (unsigned char)CLIP3((b * 255.0),0,255);
};
4 HSV顏色模型對圖像的色相、飽和度和明度進行調節
/*************************************************
功 能:HSV調整
參 數:srcData - [輸入/輸出] 原始圖像,格式為32位BGRA格式,執行后修為結果圖像width - [輸入] 原始圖像寬度height - [輸入] 原始圖像高度tride - [輸入] 原始圖像的Stride(也就是行字節數width*4)hIntensity - [輸入] h值sIntensity - [輸入] s值vIntensity - [輸入] v值
返 回: 0-成功, 其他-失敗.
*************************************************/
int adjustHSV(unsigned char *srcData, int width, int height, int stride, float hIntensity, float sIntensity, float vIntensity)
{int ret = 0;if (srcData == NULL){printf("input image is null!");return -1;}//Processunsigned char R, G, B;float h = 0, s = 0, v = 0;unsigned char* pSrc = srcData;int offset = stride - width * 4;for (int j = 0; j < height; j++){for (int i = 0; i < width; i++){B = pSrc[0];G = pSrc[1];R = pSrc[2];RGB2HSV(R, G, B, &h, &s, &v);h = h + hIntensity > 360 ? h + hIntensity - 360 : h + hIntensity;s = CLIP3(s + sIntensity, 0, 1.0f);v = CLIP3(v + vIntensity, 0, 1.0f);HSV2RGB(h, s, v, &R, &G, &B);pSrc[0] = B;pSrc[1] = G;pSrc[2] = R;pSrc += 4;}pSrc += offset;}return ret;
};
5 演示Demo
5.1 開發環境
-
Windows 10 Pro x64
-
Visual Studio 2015
5.2 功能介紹
????????演示程序主界面如下圖所示,具有圖像讀取、顯示、保存、顯示RGBA值,以及HSV調整、鼠標按鍵按下顯示原圖、鼠標按鍵抬起顯示效果圖等功能。
原圖
效果圖(h=26, s=0.12, v=0.16)
5.3 下載地址
????????開發環境:
-
Windows 10 pro x64
-
Visual Studio 2015
????????下載地址: 圖像處理之HSV顏色空間
參考
????????圖像視頻濾鏡與人像美顏美妝算法詳解. 胡耀武、譚娟、李云夕. 電子工業出版社、2020-07
?