参考 学习网址:https://blog.csdn.net/column/details/opencv-tutorial.html
1.cv::Mat类是用于保存图像以及其他矩阵数据的数据结构
2.imread函数 加载图像
用imread打开图片给Mat类对象
eg:
Mat myMat= imread("dota.jpg");
图片放在工程目录下
3.namedWindow函数
用于创建窗口
4.imshow函数
在指定的窗口中显示一幅图像。
nameWindows和imshow中窗体名应该为一样 否则会有两个窗口imshow本身也会创建窗体
eg:
namedWindow("窗体");
imshow("窗体",image); //第二个参数是Mat对象 也就是图片
5.imwrite函数
将图片写入文件
imwrite("图片名.png", mat);
//第二个参数是Mat对象,也就是要写入文件的图
6.ROI区域
在图片上划分一个区域
//讲logo放在beijing上
Mat imageROI; //定义一个Mat对象用来指定一个区域
//方法一 image代表在image这张图片上 前两个参数是位置 后两个参数是区域的长宽
imageROI=image(Rect(500,250,logo.cols,logo.rows));
//方法二 image代表在image这张图片上 有两个Range参数 代表 这两个参数里面又有两个参数 分别是开始和停止的位置
imageROI=image(Range(250,250+logo.rows),Range(200,200+logo.cols));
图片叠加的例子
Mat srcImage1= imread("beijing".jpg");
Mat logoImage= imread("logo.jpg");
//定义一个Mat类型并给其设定ROI区域
Mat imageROI= srcImage1(Rect(200,250,logoImage.cols,logoImage.rows));
//加载掩模(必须是灰度图)
Mat mask= imread("dota_logo.jpg",0);
//【4】logoImage参照着掩膜mask拷贝到imageROI
logoImage.copyTo(imageROI,mask);
//因为imageROI是srcImage1上的区域 所以此时叠加已经完成
7.addWeighted函数
addWeighted(srcImage1, alphaValue, srcImage2, betaValue, 0.0, dstImage);
//上面的意思就是dst = src1*alpha+ src2*beta + gamma; 倒数第二个参数是偏移量 我还不懂 一般都是0.0
//求和的两个必须同样尺寸和深度 之前分通道spilt之后做加法出问题就是因为一个是单通道一个是多通道直接报错
8.split函数
spilt函数有两个原型
//但是前面都是要分离的图像 后面都是分离出来的结果的数组(0是蓝色 1是绿色 2是红色)
C++: void split(const Mat& src, Mat*mvbegin);
C++: void split(InputArray m,OutputArrayOfArrays mv);
eg:
vector channels;
Mat imageBlueChannel;
Mat imageGreenChannel;
Mat imageRedChannel;
srcImage4= imread("dota.jpg");
// 把一个3通道图像转换成3个单通道图像
split(srcImage4,channels);//分离色彩通道
imageBlueChannel = channels.at(0);
imageGreenChannel = channels.at(1);
imageRedChannel = channels.at(2);
9.merge函数
merge是融合的意思所以就是spilt的反函数
也有两个原型
C++: void merge(const Mat* mv, size_tcount, OutputArray dst) //单通道图像的指针 个数 输出
C++: void merge(InputArrayOfArrays mv,OutputArray dst) //单通道图像数组 输出