1.RGB(红绿蓝)是最常见的颜色空间,它使用红、绿、蓝三个通道来表示颜色。每个通道的值范围是0到255,表示颜色的亮度。通过组合不同通道的值,可以得到各种颜色。
2.HSV(色相、饱和度、明度)是另一种常用的颜色空间,它将颜色分为三个要素:色相、饱和度和明度。色相表示颜色的种类,取值范围为0到360度;饱和度表示颜色的纯度,取值范围为0到1;明度表示颜色的亮度,取值范围为0到1。
3.HSL(色相、饱和度、亮度)是与HSV类似的颜色空间,它也将颜色分为三个要素:色相、饱和度和亮度。色相表示颜色的种类,取值范围为0到360度;饱和度表示颜色的纯度,取值范围为0到1;亮度表示颜色的亮度,取值范围为0到1。
这些颜色空间在图像处理、计算机图形学和设计中经常使用,可以根据具体的需求选择合适的颜色表示方法。
如果一个图的RGB三个值大小相等则为灰色;故只需要一个通道;
将彩色图转换为灰色图的算法通常基于以下原理:对于每个像素,将其红、绿和蓝三个分量的值进行加权平均,然后将结果作为灰度值。常用的加权平均公式是:
灰度值 = 0.2989 * 红色分量 + 0.5870 * 绿色分量 + 0.1140 * 蓝色分量
这个公式是根据人眼对不同颜色的敏感度来确定的。下面是一个示例算法,可以将彩色图像转换为灰色图像:
1.从目录处读取图片,可以直接读入彩图或者灰色图;
Mat img = imread("D:/C++learn/2.jpeg",,IMREAD_COLOR)// IMREAD_GRAYSCALE
2.创建窗口,并设置窗口大小,便于调整;
namedWindow("img", WINDOW_AUTOSIZE);
namedWindow("gray", WINDOW_AUTOSIZE);
imshow("img", img);
imshow("gray", gray);
3.输出图片,可以修改图像保存格式
imwrite("D:/C++learn/2.png", img);
4.视频处理基本函数:
VideoCapture video;
video.open("D:/C++learn/ball.mp4");
//video.open(0) ;//打开电脑前置摄像头
cout << "视频帧率" << video.get(CAP_PROP_FPS);
cout << "视频宽度" << video.get(CAP_PROP_FRAME_WIDTH);
5.色彩空间、色素位数变换:
通过扩展imagewatch插件 进行查看中间过程生产的图片:
Mat img = imread("D:/C++learn/2.jpeg");
Mat img32;
img.convertTo(img32,CV_32F,1/255.0,0);
Mat hsv, hsv32;
cvtColor(img, hsv, COLOR_BGR2HSV);
cvtColor(img32, hsv32, COLOR_BGR2HSV);
6.通道分离提取与合并
Mat img = imread("D:/C++learn/1.jpg");
Mat img32;
img.convertTo(img32,CV_32F,1/255.0,0);
Mat imgs[3],img0,img1,img2, img_h;
//把img分成imgs三个分量的mat类型;
split(img, imgs);
img0 = imgs[0];
img1 = imgs[1];
img2 = imgs[2];
//把 数组类型的 imgs的 三个通道合并成img_h,
merge(imgs, 3, img_h);
//产生一个大小相同的0mat型通道
Mat zero = Mat::zeros(Size(img.cols, img.rows),CV_8UC1);
//创建mat向量,不断加维数
vector imgsv;
imgsv.push_back(img0);
imgsv.push_back(zero);
imgsv.push_back(zero);
Mat imgsh;
//向量类型的src不需要写数字,分离第一个通道
merge(imgsv, imgsh);