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 }
复制代码

 

转载于:https://www.cnblogs.com/whw19818/p/6307514.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值