1、图像的加载(读取):
使用函数Mat cv::imread(const String& filename,//文件的路径名称
int flags=IMREAD_COLOR//以什么方式读取?彩色?灰度图?
)
2、图像的显示:(有两个显示相关的函数)
//2-1、这个函数是你自己创建一个windows窗口,然后再使用imshow显示图片用。
void cv::namedWindow(const String& winname,//窗口名称,用作窗口的标识符
int flags=WINDOW_AUTOSIZE //窗口属性设置标志窗口多大,是否自适 应图像的大小 ,能否支持窗口的拖拽。
)
注意:如果你使用autosize标识,那么当你要显示的图像过大时它只显示图像的一部分。
//2-2、真正的显示函数
void cv::imshow(const String &winname,//要显示图像的窗口的名字,用字符串形式复制
//当然,如果这个窗口是你用上边那个函数创建的
//那这里就写你创建的窗口的名字!
inputArray mat //要显示的图像矩阵
)
注意:4.0.0版本在创建窗口时nameWindow(),但是关闭的时候它没办法自动释放窗口资源的。还需要使用destroyWindow()。为了避免这种情况,其实我们直接使用imshow而不用上边的那个nameWindow也是可以的,因为inshow本身也有创建窗口的功能,因为它内部调用了nameWindow()
3、图像保存:
使用函数imwrite();
bool cv::imwrite(const String& filename,//新保存的图像的地址和文件名,包含图像格式
注意新保存的图像的格式与源图像可以不一致。
inputArray img,//将要保存的Mat类矩阵变量
const std::vector<int>& params=std::vector<int>()//保存图片格式属性设置标志。比如我们 对图像进行一个压缩保存。默认的参数
是保存原图像的质量。
)
4、我们在查函数或者类的方法的时候
在技术文档主页一般点到function那,然后输入对应的函数,假如我想查:imread。输入并选中 imread cv。当我们点进去这个函数的时候,我们看第二个参数,我们不知道应该使用哪种宏,我们就点击一下这第二个参数,就可以看到这些宏的枚举。
比如:在读取图像时可以直接将彩色图像读取为灰度图的。
同样道理namewindow的参数和属性也是可以查看枚举宏的。
5、实战代码读取显示图片
#include<iostream>
#include<opencv2/opencv.hpp>//使用这个大的头文件可以将所有的opencv的头文件全都包含进去
using namespace std;
using namespace cv;
int main()
{
//创建一个Mat类,并读取图片数据
Mat img;
img = imread("C:\\Users\\神匠\\Desktop\\lena.jpeg", IMREAD_COLOR);//以彩色方式读取
Mat gray= imread("C:\\Users\\神匠\\Desktop\\lena.jpeg", IMREAD_GRAYSCALE);//以灰度图方式读取
//创建用来显示的窗口
namedWindow("Color", WINDOW_AUTOSIZE);//窗口根据图片进行自调整
namedWindow("Gray",WINDOW_NORMAL);//窗口可以根据用户需求拖拽调整
//显示图像
imshow("Color", img);//注意在调试的时候,图像只是一闪就没了,因为这个imshow执行完之后,它会继续执行return
imshow("Gray", gray);//如果想让窗口保持,需要加一个waitkey(0);这个也是opencv提供的函数
//保存图像
vector<int> compression_params;
compression_params.push_back(IMWRITE_PNG_COMPRESSION);
compression_params.push_back(9);//压缩等级为9,这是官方文档中的示例代码
imwrite("C:\\Users\\神匠\\Desktop\\NEWlena.PNG", img, compression_params);//第一种保存为
压缩格式
imwrite("C:\\Users\\神匠\\Desktop\\NEW2lena.bmp", gray);//第二种保存为默认格式
waitKey();
return 0;
}