1 色相、飽和度、明度定義


  色彩三要素(Elements of color)色彩可用的色調(色相)、飽和度(純度)和明度來描述。人眼看到的任一彩色光都是這三個特性的綜合效果,這三個特性即是色彩的三要素,其中色調與光波的波長有直接關系,亮度和飽和度與光波的幅度有關。

1.1 色相定義

  色彩是由於物體上的物理性的光反射到人眼視神經上所產生的感覺。色的不同是由光的波長的長短差別所決定的。作為色相,指的是這些不同波長的色的情況。波長最長的是紅色,最短的是紫色。把紅、橙、黃、綠、藍、紫和處在它們各自之間的紅橙、黃橙、黃綠、藍綠、藍紫、紅紫這6種中間色——共計12種色作為色相環。在色相環上排列的色是純度高的色,被稱為純色。這些色在環上的位置是根據視覺和感覺的相等間隔來進行安排的。用類似這樣的方法還可以再分出差別細微的多種色來。在色相環上,與環中心對稱,並在180度的位置兩端的色被稱為互補色

                             

1.2 飽和度定義

  用數值表示色的鮮艷或鮮明的程度稱之為彩度。有彩色的各種色都具有彩度值,無彩色的色的彩度值為0,對於有彩色的色的彩度(純度)的高低,區別方法是根據這種色中含灰色的程度來計算的。彩度由於色相的不同而不同,而且即使是相同的色相,因為明度的不同,彩度也會隨之變化的。

                         

1.3 明度定義

  表示色所具有的亮度和暗度被稱為明度。計算明度的基准是灰度測試卡。黑色為0,白色為10,在0—10之間等間隔的排列為9個階段。色彩可以分為有彩色和無彩色,但后者仍然存在着明度。作為有彩色,每種色各自的亮度、暗度在灰度測試卡上都具有相應的位置值。彩度高的色對明度有很大的影響,不太容易辨別。在明亮的地方鑒別色的明度比較容易的,在暗的地方就難以鑒別。

                           

色相、飽和度、明度調節

  常在RGB色彩空間調整亮度與飽和度不是很直觀,而HSL彩色空可以很直觀表示出每個像素的飽和度與亮度。所以首先讀取圖像的像素RGB值然后再轉換到HSL空間得到飽和度與亮度值,調整以后再從HSL空間轉換到RGB空間的RGB值,對每個像素完成這樣的調整就完成圖像的亮度與飽和度調整。

飽和度調節源碼實現

復制代碼
 1 #include "highgui.h"  2 #include "cv.h"  3 #include "stdio.h"  4 IplImage* src = 0;  5 int g_switch_value = 0;  6 int value=0;  7 int main( )//int argc,char**argv)  8 {  9 src = cvLoadImage("11.bmp", 1); 10 CvSize cvSz = cvGetSize(src); 11 IplImage* h_plane = cvCreateImage( cvGetSize(src), 8, 1 ); 12 IplImage* s_plane = cvCreateImage( cvGetSize(src), 8, 1 ); 13 IplImage* v_plane = cvCreateImage( cvGetSize(src), 8, 1 ); 14 cvCvtColor(src,src,CV_RGB2HSV);//RGB轉為HSV空間 15 cvCvtPixToPlane( src,h_plane, s_plane, v_plane, 0 ); //HSV分為H,S,V三個分量 16 cvNamedWindow("src",1); 17 cvCreateTrackbar("bar","src",&g_switch_value,200,NULL); 18 unsigned char* pTest = (uchar*)s_plane->imageData; 19 int m=src->height; 20 int n=src->width; 21 printf("%d\n",m);//輸出圖像的長和寬 22 printf("%d\n",n); 23 while(1) 24  { 25 if(cvGetTrackbarPos("bar","src")!=value) 26  { 27 for(int y=0;y<m;y++) 28  { 29 for( int x=0; x<n; x++ ) 30  { 31 pTest[y*n+x] +=cvGetTrackbarPos("bar","src")-value;//pTest[y*n+x]+g_switch_value; 32  } 33  } 34 value=cvGetTrackbarPos("bar","src"); 35  } 36 cvCvtPlaneToPix( h_plane, s_plane, v_plane, 0, src ); 37  cvCvtColor(src,src,CV_HSV2RGB); 38 cvShowImage("src",src); 39 if(cvWaitKey (15)==27) break; //按Esc退出 40  } 41 cvReleaseImage(&src); 42 cvDestroyWindow("src"); 43 return 0; 44 }
復制代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM