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

opencv学习(十一)// ROI // 图像叠加 // 线性混合 // ROI+线性混合

2018-04-12 12:48 387 查看

1,选定感兴趣区域ROI,进行图像叠加





2,线性混合(addWeighted)





addWeighted()函数



效果图



3,指定区域ROI+线性混合

效果图(对比1)



以上应用实例

#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;

//对全局函数进行声明
//
bool ROI_ADDImage();
bool LinearBlending();
bool ROI_linearBlending();

//主函数
int main()
{
system("color F");// color of Background of window

if (ROI_ADDImage()&&LinearBlending()&&ROI_linearBlending())
{
printf("sucess!");
cout << endl << "\n运行成功,得出了需要的图像";//same function with the upper one, to make the window stay
}

waitKey(0);
return 0;
}

//选感兴趣区域ROI,实现图像叠加函数
//
//
bool ROI_ADDImage()
{
Mat aimag = imread("D://3.jpg");
Mat logoimag = imread("D://4.jpg");//imread image
if (!aimag.data)//untersuchen,ob es falsch ist
{
printf("aimg is false!\n");
return 0;
}
if (!logoimag.data)
{
printf("logoimg is false!\n");
return 0;
}
Mat imageROI = aimag(Rect(20, 0, logoimag.cols, logoimag.rows));//选取ROI区域(位置,大小)
Mat mask = imread("2.jpg",0);//掩膜(必须为灰度图)
logoimag.copyTo(imageROI, mask);//将掩膜复制到ROI区域
namedWindow("use ROI to composition of two images");
imshow("use ROI to composition of two images", aimag);

return true;

}

//函数:实现线性图像混合(addWeighted)注意!两幅图尺寸需一致)
//
//
bool LinearBlending()
{
double alphaValue = 0.5;
double betaValue;
Mat img2, img3, bimg;
img2 = imread("D://mogu.jpg");
img3 = imread("D://rain.jpg");
if (!img2.data)//untersuchen,ob es falsch ist
{
printf("aimg is false!\n");
return 0;
}
if (!img3.data)
{
printf("logoimg is false!\n");
return 0;
}
betaValue = (1 - alphaValue);
addWeighted(img2, alphaValue, img3, betaValue, 0, bimg);//图像混合加权操作

imshow("2)before_LinearBlending", img2);
imshow("3)after_LinearBlending", bimg);

}

//函数;ROI+linearBlending,选定区域+线性混合
//
//
bool ROI_linearBlending()
{
Mat img4 = imread("D://3.jpg", 1);
Mat logoimag = imread("D://4.jpg");//imread image
if (!img4.data)//untersuchen,ob es falsch ist
{
printf("aimg4 is false!\n");
return 0;
}
if (!logoimag.data)
{
printf("logoimg is false!\n");
return 0;
}
Mat imageROI2;
imageROI2 = img4(Rect(200, 250, logoimag.cols, logoimag.rows));//选取ROI区域(位置,大小)→→方法二//imageROI=img4(Range(250,250+logoImage.rows),Range(250,250+logoImage.cols));
addWeighted(imageROI2, 0.5, logoimag, 0.3, 0,imageROI2);
imshow("4)ROI+Linearblending", img4);
return true;

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