openCV学习笔记七:基本图像运算

1.图像加法:
首先介绍加法函数属性:
void addWeighted(InputArray src1, double alpha, InputArray src2,double beta, double gamma, OutputArray dst, int dtype=-1);
参数说明:

  1. 第一个参数:src1,表示进行加权操作的第一个图像对象,即输入图片1;
  2. 第二个参数:double型的alpha,表示第一个图像的加权系数,即图片1的融合比例;
  3. 第三个参数:src2,表示进行加权操作的第二个图像对象,即输入图片2;
  4. 第四个参数:double型的beta,表示第二个图像的加权系数,即图片2的融合比例。很多情况下,有关系 alpha+beta=1.0;
  5. 第五个参数:double型的gamma,表示一个作用到加权和后的图像上的标量,可以理解为加权和后的图像的偏移量;
  6. 第六个参数:dst,表示两个图像加权和后的图像,尺寸和图像类型与src1和src2相同,即输出图像;
  7. 第七个参数:输出阵列的可选深度,有默认值-1。当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()。

两幅图像融合时,我们要求这两幅图像必须类型尺寸一致。但是,若遇到两幅图像尺寸不相同时,我们怎么处理呢?两幅图像融合时,我们要求这两幅图像必须类型尺寸一致。但是,若遇到两幅图像尺寸不相同时,我们怎么处理呢?

两种方法解决这个问题
1.重置其中一副图像的尺寸大小,使其两幅图像尺寸一致;
2.在较大的图像中设置感兴趣区域ROI,获得与较小的那个图像尺寸一致的区域;

第一种方法代码:

#include
#include
#include
#include

using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
Mat img1 = imread(“1.jpg”);
Mat img2 = imread(“2.jpg”);
Mat dst; //存储结果
namedWindow(“img1”); //创建窗口
imshow(“img1”, img1);
namedWindow(“img2”); //创建窗口
imshow(“img2”, img2);
resize(img1, img1, Size(img2.cols, img2.rows));//调整img1的大小与img2的大小一致,融合函数addWeighted()要求输入的两个图形尺寸必须相同
cout << "img1 " << int(img1.at(10, 10)[0]) << endl;
cout << "img2 " << int(img2.at(10, 10)[0]) << endl;
addWeighted(img1, 0.6, img2, 0.4, 0., img2); //最后融合效果显示在img2图像上
namedWindow(“图像1与图像2融合效果图”);
imshow(“图像1与图像2融合效果图”, img2);
waitKey(0);
}
openCV学习笔记七:基本图像运算_第1张图片
运行结果如下:

第二种方法代码:

#include
#include
#include
#include

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
Mat img1 = imread(“1.jpg”);
Mat img2 = imread(“2.jpg”);
Mat dst; //存储结果
namedWindow(“img1”); //创建窗口
imshow(“img1”, img1);
namedWindow(“img2”); //创建窗口
imshow(“img2”, img2);
cout << "img1 " << int(img1.at(10, 10)[0]) << endl;
cout << "img2 " << int(img2.at(10, 10)[0]) << endl;
Mat imageROI;//利用ROI,获取将要理图像的矩形大小
imageROI = img2(Rect(400, 50, img1.cols, img1.rows));//在img2图像左上角(400,50)处(即起点位置),获取同img1图像尺寸一致的区域
addWeighted(img1, 0.6, imageROI, 0.4, 0., imageROI);
namedWindow(“图像1与图像2融合效果图”);
imshow(“图像1与图像2融合效果图”, img2);
waitKey(0);
}
openCV学习笔记七:基本图像运算_第2张图片
运行结果如下:

openCV学习笔记七:基本图像运算_第3张图片
图像减法函数:

absdiff(img1,img2,dst);

乘除与或非:

dst=5*img1;//增加曝光
dst=img1/5;//降低曝光
bitwise_and(img1,img2,dst);//逻辑与,求交集
bitwise_or(img1,img2,dst);//逻辑或,求并集
bitwise_not(img1,dst);//逻辑非,求补集
bitwise_xor(img1,img2,dst);//异或,相同为0,相异为1

openCV学习笔记七:基本图像运算_第4张图片
openCV学习笔记七:基本图像运算_第5张图片
openCV学习笔记七:基本图像运算_第6张图片

openCV学习笔记七:基本图像运算_第7张图片

你可能感兴趣的:(OpenCV学习笔记)