本文为原创文章,未经本人允许,禁止转载。转载请注明出处。
1.颜色空间
颜色空间:也称彩色模型(又称彩色空间或彩色系统)。本质上,彩色模型是坐标系统和子空间的阐述。位于系统的每种颜色都有单个点表示。RGB(红绿蓝)是依据人眼识别的颜色定义出的空间,可表示大部分颜色。但在科学研究中一般不采用RGB颜色空间,因为它的细节难以进行数字化的调整。它将色调,亮度,饱和度三个量放在一起表示,很难分开。
2.加载图像
cv::imread
功能是加载图像文件成为一个Mat对象。
cv::imread
有两个参数:
- 第一个参数表示图像文件名称。
- 第二个参数表示加载的图像是什么类型,支持常见的三个参数值:
IMREAD_UNCHANGED
(<0)表示加载原图,不做任何改变。IMREAD_GRAYSCALE
(0)表示把原图作为灰度图像加载进来。IMREAD_COLOR
(>0)表示把原图作为RGB图像加载进来。
⚠️OpenCV支持JPG、PNG、TIFF等常见格式图像文件加载。
👉Demo1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(){
Mat src=imread("/Users/xinshichao/PersonalWork/C++Demo/Pictures/p1.jpeg",IMREAD_UNCHANGED);
if(src.empty()){
printf("could not find the image...\n");
return -1;
}
namedWindow("src",WINDOW_AUTOSIZE);
imshow("src",src);
waitKey(0);
return 0;
}
Demo1输出结果:
👉Demo2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(){
Mat src=imread("/Users/xinshichao/PersonalWork/C++Demo/Pictures/p1.jpeg",IMREAD_GRAYSCALE);
if(src.empty()){
printf("could not find the image...\n");
return -1;
}
namedWindow("src",WINDOW_AUTOSIZE);
imshow("src",src);
waitKey(0);
return 0;
}
Demo2输出结果:
👉Demo3:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(){
Mat src=imread("/Users/xinshichao/PersonalWork/C++Demo/Pictures/p1.jpeg",IMREAD_COLOR);
if(src.empty()){
printf("could not find the image...\n");
return -1;
}
namedWindow("src",WINDOW_AUTOSIZE);
imshow("src",src);
waitKey(0);
return 0;
}
Demo3输出结果(和Demo1结果一样,因为原图就是RGB彩色图像):
3.显示图像
cv::namedWindow
的功能是创建一个OpenCV窗口,它是由OpenCV自动创建与释放,用户无需销毁它。
常见用法:
1
namedWindow("Window Title",WINDOW_AUTOSIZE)
WINDOW_AUTOSIZE
会自动根据图像大小,显示窗口大小,不能人为改变窗口大小。
WINDOW_NORMAL
允许修改窗口的大小。
cv::imshow
根据窗口名称显示图像到指定的窗口上去,第一个参数是窗口名称,第二个参数是Mat对象。
代码示例见第2部分的Demo1~Demo3。
4.修改图像
cv::cvtColor
的功能是把图像从一个彩色空间转换到另一个彩色空间,有三个参数,第一个参数表示源图像,第二个参数表示彩色空间转换之后的图像,第三个参数表示源和目标色彩空间,如:COLOR_BGR2HLS
、COLOR_BGR2GRAY
等。
HLS彩色空间:色调(H),亮度(L),饱和度(S)。
是BGR而不是RGB是因为一个像素点内三个通道的排列顺序就是B、G、R。
Demo4:
1
2
3
4
Mat src_gray;
cvtColor(src,src_gray,COLOR_BGR2GRAY);
namedWindow("src_gray",WINDOW_AUTOSIZE);
imshow("src_gray",src_gray);
Demo4输出结果同Demo2。
5.保存图像
cv::imwrite
可以保存图像到指定目录路径。
只有8位、16位的PNG、JPG、Tiff文件格式而且是单通道或者三通道的BGR图像才可以通过这种方式保存。
保存PNG格式的时候可以保存透明通道的图片。
可以指定压缩参数。