个人理解
我们常了解到的颜色空间是RGB,是一个三维的分别标识红,绿,蓝
这个颜色空间可以标识我们生活中常见常见到的大部分颜色,可以描述255*255*255>1600万
GRAY灰度也是一个空间,是一个维度的线行空间
0是黑色 255是白色,中间的值介于0和255之间,我们称为灰色,当然不同的值灰色程度是不一样的
除了上面的颜色空间之外还有其他的颜色空间,比如:HSV,HLS,YUV...,颜色空间是独立的,并且是不同的学者提出
OpenCV和颜色空间
在opencv中提供了一个函数cvtColor,可以将一张图片在不同的两个颜色空间之下转换
Imgproc.cvtColor(src, dst, code);
Imgproc.cvtColor(src, dst, code, dstCn);
src 标识输入的图像
dst标识输出图像
code转换标识
dstCn–目标映像中的通道数;如果参数为0,则通道数将自动从src和code派生
其中转换标识就是我们要将颜色空间转换的成目标颜色空间,在Imgproc中提供了很多转换标识
灰度化
灰度化是最常用的颜色空间转换 RGB=>GRAY
Mat src = Imgcodecs.imread(filename);
Mat dst1=new Mat();
Mat dst2=new Mat();
Imgproc.cvtColor(src, dst1,Imgproc.COLOR_RGB2GRAY);
HighGui.imshow("原图",src);
HighGui.imshow("灰度化",dst1);
RGB=>HLS:
String filename = "D:\\svnp\\MyYan\\res\\drawable\\222.png";
Mat src = Imgcodecs.imread(filename);
Mat dst1=new Mat();
Mat dst2=new Mat();
Imgproc.cvtColor(src, dst1,Imgproc.COLOR_RGB2HLS);
HighGui.imshow("原图",src);
HighGui.imshow("HLS",dst1);
HLS=>RGB
String filename = "D:\\svnp\\MyYan\\res\\drawable\\222.png";
Mat src = Imgcodecs.imread(filename);
Mat dst1=new Mat();
Mat dst2=new Mat();
Imgproc.cvtColor(src, dst1,Imgproc.COLOR_RGB2HLS);
Imgproc.cvtColor(dst1,dst2,Imgproc.COLOR_HLS2RGB);
HighGui.imshow("原图",src);
HighGui.imshow("HLS",dst1);
HighGui.imshow("HLS=>RGB",dst2);
我们可以发现从RGB转换到颜色空间HLS ,再一次的从HLS转换为RGB获取到的图片和原图是一样的,也就是有些是可以转变回去,但是有些却没办法转换回去比如从GRAY 就没办法到RGB ,这个和颜色空间颜色表示的范围有一定的关系,灰度空间只能表示255颜色,但是RGB 表示1600多万,所以当我们从GRAY=>RGB时候,我们看到的图像和在GRAY是一样的
上面就是我里面的opencv的颜色空间转换函数cvtColor 希望对你有所帮助