1.前言:
参考了下面的博客,感谢分享:
用opencv里的函数实现图像的读入读出,看到完成的效果的时候很开心!
拿很多不同的图片试了一遍又一遍hhhhhhh(不许笑我~
2.我的环境:
OpenCV版本:opencv3.4.0
codeblocks版本:codeblocks-17.12
3.关于Mat:
Mat是OpenCV中用于存放图像的数据结构。我们知道,图像在计算机中是以数组的形式存放的。Mat正是描述的这样一种数据结构。通过调用相关方法,我们能够实现对图像的输入输出以及一些操作。同时,Mat又不止可以作为图像容器,它也可以作为一种比较纯粹的描述矩阵这种数学对象的结构。它比C中的IplImage好的地方在于,由于它的“计数器”机制,我们不需要对它进行手动的内存回收,从而避免了常常困扰C/C++程序员的“内存泄露”问题。(作者:xmfthu)
4.头文件:
需要包含以下三个头文件,其中:
highgui.hpp :C++ only头文件,定义了创建窗口的flag,窗口事件的flag,Qt窗口的flag,事件回调函数原型,以及窗口/控件操作相关的系列函数,openGL的包装函数;图像输入输出显示的相关函数;视频摄像头输入输出显示的相关函数VideoCapture,VideoWriter;
core.hpp:包含了一些图像处理核心功能,详细请看官方说明:
https://docs.opencv.org/ref/2.4/db/d8c/core_2core_8hpp.html
#include<iostream>
#include<highgui.hpp>
#include<core.hpp>
5.函数介绍:
imread()函数
作用:读入图片
参数:第一个参数为待读入图片的带路径名称(字符串);第二个参数为读入图像的颜色格式:
读入彩色格式参数为IMREAD_COLOR,读入灰度格式参数为IMREAD_GRAYSCALE
Mat imread(const string& filename, int flags=1 )
imshow()函数
作用:显示图片
参数:第一个参数是显示窗口的标题名称(字符串);第二个参数为Mat类型的图片对象 ,即要显示的图片名称
void imshow(const string& winname, InputArray mat)
waitKey()函数
作用:使显示图片窗口停留,避免一闪而过
int waitKey(int delay=0)
6.测试:
完整代码:
#include<iostream>
#include<highgui.hpp>
#include<core.hpp>
using namespace std;
using namespace cv;
int main()
{
string pic_name = "C:\\Users\\XC\\Desktop\\pig.jpg";
Mat img_color = imread(pic_name,IMREAD_COLOR);
Mat img_gray = imread(pic_name,IMREAD_GRAYSCALE);
imshow("color",img_color);
imshow("gray",img_gray);
waitKey();
return 0;
}
运行效果:
如果你还遇到了其他奇奇怪怪的问题,欢迎留言讨论!
(ps:以上为个人学习记录,如果有错误的地方欢迎批评指正鸭~