您的位置:首页 > 运维架构

opencv线性混合(适用于两张不同尺寸的图片)

2018-03-14 16:52 621 查看
关于线性混合,Opencv官方文档说的要两张相同尺寸的图片,这个条件太苛刻了,所以我这里通过改变其中一张图片大小使其和另外一张图片尺寸相同,先给出两张漂亮的图片:



a.jpg



b.jpg
然后代码就是实现两张图片的叠加效果,是不是很期待啊,哈哈哈!!#include <cv.h>
#include <highgui.h>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
double alpha = 0.5; double beta; double input;

Mat img_src1,img_src2,src2, dst;
cout<<" Simple Linear Blender "<<std::endl;
cout<<"-----------------------"<<std::endl;
cout<<"* Enter alpha [0-1]: ";
cin>>input;

if(alpha >=0 && alpha<1 )
{
alpha = input;
}

img_src1 = imread("D:\\visiopj\\线性混合\\a.jpg");
src2 = imread("D:\\visiopj\\线性混合\\b.jpg");
//改变图像2的大小,并且使其与图像1相同
resize(src2,img_src2,Size(500,311));
//cout<<img_src2.size().width<<endl;

if (!img_src1.data)
{
printf("Error loading src1 \n"); return -1;
}

if(!img_src2.data)
{
printf("Error loading src2 \n"); return -1;
}

namedWindow("Linear Blend", 1);

beta = (1.0 - alpha);
addWeighted(img_src1,alpha,img_src2,beta,0.0,dst);
imshow("Linear Blend",dst);
waitKey(0);
return 0;
}代码不难理解,所以这里就不解释了,关键在于首先使用img_src1.size().width和img_src.size().height分别查看a.jpg的宽和高(这里的宽和高分别为500和311),然后对src2(b.jpg)使用resize重新设置尺寸大小,使其和img_src1的尺寸一样,这样后面我们就能使用addWeighted函数进行线性混合
下面给出大家期待的效果图





,怎么样,还喜欢把

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: