【opencv C++学习笔记】1

一、图像基本知识:

1.1RGB、HSV和HSL颜色空间:

1.RGB(红绿蓝)是最常见的颜色空间,它使用红、绿、蓝三个通道来表示颜色。每个通道的值范围是0到255,表示颜色的亮度。通过组合不同通道的值,可以得到各种颜色。

2.HSV(色相、饱和度、明度)是另一种常用的颜色空间,它将颜色分为三个要素:色相、饱和度和明度。色相表示颜色的种类,取值范围为0到360度;饱和度表示颜色的纯度,取值范围为0到1;明度表示颜色的亮度,取值范围为0到1。

3.HSL(色相、饱和度、亮度)是与HSV类似的颜色空间,它也将颜色分为三个要素:色相、饱和度和亮度。色相表示颜色的种类,取值范围为0到360度;饱和度表示颜色的纯度,取值范围为0到1;亮度表示颜色的亮度,取值范围为0到1。

这些颜色空间在图像处理、计算机图形学和设计中经常使用,可以根据具体的需求选择合适的颜色表示方法。

【opencv C++学习笔记】1_第1张图片【opencv C++学习笔记】1_第2张图片

 1.2灰度图

如果一个图的RGB三个值大小相等则为灰色;故只需要一个通道;

将彩色图转换为灰色图的算法通常基于以下原理:对于每个像素,将其红、绿和蓝三个分量的值进行加权平均,然后将结果作为灰度值。常用的加权平均公式是:

灰度值 = 0.2989 * 红色分量 + 0.5870 * 绿色分量 + 0.1140 * 蓝色分量

这个公式是根据人眼对不同颜色的敏感度来确定的。下面是一个示例算法,可以将彩色图像转换为灰色图像:

  1. 输入彩色图像。
  2. 创建一个与输入图像大小相同的灰色图像。
  3. 对于输入图像的每个像素:
    • 获取红、绿和蓝三个分量的值。
    • 使用上述加权平均公式计算灰度值。
    • 将灰度值设置为灰色图像中对应像素的值。
  4. 输出灰色图像。

二、opencv常用函数

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插件 进行查看中间过程生产的图片:

【opencv C++学习笔记】1_第3张图片

【opencv C++学习笔记】1_第4张图片

【opencv C++学习笔记】1_第5张图片【opencv C++学习笔记】1_第6张图片

 【opencv C++学习笔记】1_第7张图片【opencv C++学习笔记】1_第8张图片

         

	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);

你可能感兴趣的:(opencv,学习,笔记)