1 加载、显示、修改和保存图像
1.1 加载图像(cv::imread)
imread 功能是加载图像文件成为一个Mat对象。
函数原型:
Mat imread(const String& filename,int flags = IMREAD_COLOR);
- 第一个参数表示图像文件名称。
- 第二个参数表示加载的图像是什么类型,支持常见的三个参数值
- IMREAD_UNCHANGED(<0)表示加载原图,不做任何改变
- IMREAD_GRAYSCALE(0)表示把原图作为灰度图像加载进来
- IMREAD_COLOR(>0)表示把原图作为RGB图像加载进来
1.2 显示图像(cv::namedWindow与cv::imshow)
1.2.1 namedWindow
- namedWindow功能是创建一个OpenCV窗口,它是由OpenCV自动创建于释放,无需自行销毁
- 函数原型
void nameWindow(const string& winname,int flags = WINDOW_AUTOSIZE) ;
- 第一个参数是窗口名
- 第二个参数是窗口标识
- WINDOW_AUTOSIZE:其会自动根据图像大小,显示窗口大小,不能认为改变窗口大小
- WINDOW_NORMAL:用户可以改变这个窗口大小
1.2.2 imshow
- 功能:根据窗口名称显示图像到指定的窗口上去
- 函数原型:
void imshow(const string& winname, InputArray image)
- 第一个参数:窗口名字
- 第二个参数:要显示的图像,为Mat对象
1.3 修改图像(cv::cvtColor)
- 功能:把图像从一个彩色空间转换到另一个彩色空间。
- 函数原型
void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );
- 第一个参数:输入图像,即要进行颜色空间变换的原图像,可以为Mat类。src = source
- 第二个参数:输出图像,即进行颜色空间变换后存储图像,也可以Mat类。dst = destination
- 第三个参数:转换的代码或标识,如:COLOR_BGR2HLS (HLS为色相H、亮度L、饱和度S)、COLOR_BGR2GRAY (GRAY为灰度) 等。
1.4 保存图像(cv::imwrite)
- 功能:保存图像文件到制定目录路径
- 函数原型
bool imwrite( const String& filename, InputArray img, const std::vector<int>& params = std::vector<int>());
- 第一个参数:需要写入的文件名,要加后缀,如"test.jpg"
- 第二个参数:表示Mat类型的图像数据
- 第三个参数:编码格式
- 只有8位、16位的PNG、JPG、Tiff文件格式而且是单通道或者三通道的BGR的图像才可以通过这种方式保存
- 保存PNG格式的时候可以保存透明通道的图片
- 可以指定压缩参数。
1.5 示例代码
#include<opencv2/opencv.hpp> //引入所需的类和函数的头文件
#include<iostream>
using namespace std;
using namespace cv; //在OpenCV的C++API中,所有类和函数都在命名空间cv内定义
int main()
{
Mat image; //创建一个Mat对象
image = imread("D:/C++Project/OpenCVProject/test.jpg"); //读取图片,image相当于一个容器,存储读取的图片
if (image.empty()) { //读取文件为空
cout << "could not find the image resource..." << endl;
return -1;
}
namedWindow("My image", WINDOW_AUTOSIZE); //创建窗口
imshow("My image", image); //显示窗口
namedWindow("output window", WINDOW_AUTOSIZE);
Mat output_image;
cvtColor(image, output_image, COLOR_BGR2GRAY); //BGR转化成GRAY,即将彩色图像转换成灰度图像
imshow("output_window", output_image);
imwrite("D:/C++Project/OpenCVProject/hlstest.png", output_image); //保存为png图像
waitKey(0);
/*
waitkey:在一个给定的时间内(单位ms)等待用户按键触发;如果用户没有按下按键,则接续等待(循环)
设置waitKey(0),则表示程序会无限制的等待用户的按键事件
*/
return 0;
}