赞
踩
一、利用原色相混的比例表示的彩色空间
RGB(三原色光模式)采用加法混色法,因为它是描述各种“光”通过何种比例来产生颜色。光线从暗黑开始不断叠加产生颜色。RGB描述的是红绿蓝三色光的数值。RGBA是在RGB上增加阿尔法通道实现透明效果。基于RGB模式的普通色彩空间有sRGB, Adobe RGB和Adobe Wide Gamut RGB。
CMYK(印刷四分色模式)印刷过程中使用减法混色法,因为它描述的是需要使用何种油墨,通过光的反射显示出颜色。它是在一种白色介质(画板,页面等)上使用油墨来体现图像。CMYK描述的是青,品红,黄和黑四种油墨的数值。根据不同的油墨,介质,和印刷特性,存在多种CMYK色彩空间。(可以通过色点扩张或者转换各种油墨数值从而得到不同的外观)。
二、利用不同的概念表示的彩色空间
HSV (色相hue, 饱和度saturation, 明度value),也称HSB (B指brightness)是艺术家们常用的,因为与加法减法混色的术语相比,使用色相,饱和度等概念描述色彩更自然直观。HSV是RGB色彩空间的一种变形,它的内容与色彩尺度与其出处——RGB色彩空间有密切联系。将RGB转换为HSV的函数是rgb2hsv;
HSV的彩色模型可以用一个圆柱体和展开的圆柱表示,如下图:
HSI (色相hue,饱和度saturation,饱和度intensity),也称HSL。该模型将亮度分量与一幅彩色图像中携带的彩色信息分开。因此,HSI模型对于开发基于彩色描述的图像处理算法是一个理想的工具,对人类来说,它们看起来更加自然和直观。
三、不同彩色空间之间的转换
对于彩色图象分割而言,有时需要将RGB变换为HSI坐标,以便反映人类观察彩色的方式,转换公式如下:
了解了彩色空间以后,我们就来看一看OpenCV函数里面的cvtColor函数:
函数作用:Converts an image from one color space to another.
Parameters:C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )
C: void cvCvtColor(const CvArr* src, CvArr* dst, int code)
src – input image: 8-bit unsigned, 16-bit unsigned ( CV_16UC... ), or single-precision floating-point.
dst – output image of the same size and depth as src.
code – color space conversion code (see the description below).
dstCn – number of channels in the destination image; if the parameter is 0, the number of the channels is derived automatically from src and code .
在OpenCV里面RGB的通道顺序是B、G、R。因此在一个标准(24位)的彩色图像中第一8位就是Blue component,然后是Green, 第三个是Red。而第4、5、6 bytes would then be the second pixel (Blue, then Green, then Red), and so on.
R G B各通道值得范围如下:
关于cvtColor的源代码,原本我是想贴上去,但是~太长了将近3000行,看的人晕头转向,需要研究的请下载!!
一个应用:
- #include <iostream>
- #include <opencv.hpp>
- #include <string>
- using namespace cv;
- using namespace std;
-
- int main(){
- string imgpath = "E:\\快盘\\娱乐生活\\素材\\GEM.jpg";
- Mat img = imread(imgpath);
- Mat outimg;
- if (img.empty())
- {
- cout<<"Can not load the image!";
- }
- imshow("image",img);
- cvtColor(img,outimg,CV_BGR2GRAY);
- imshow("Gray",outimg);
- waitKey();
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。