先编码
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/video.hpp>
using namespace cv;
using namespace std;
bool ROI_AddImage();
bool LinearBlending();
bool ROI_LinearBlending();
int main(int argc, char** argv)
{
//system("color 5E");
if (ROI_AddImage() && LinearBlending() && ROI_LinearBlending())
{
cout << endl << "运行成功,得到了想要的图像";
}
ROI_AddImage();
waitKey(0);
return 0;
}
bool ROI_AddImage() {
//利用感兴趣区域ROI实现图像叠加
//1.读入图像
Mat srcImage1 = imread("erha.jpg");
Mat logoImage = imread("logo.png");
if (!srcImage1.data)
{
cout << "读入srcImage1错误" << endl;
return false;
}
if (!logoImage.data)
{
cout << "读入logoImage错误" << endl;
return false;
}
//2.定义一个Mat类型并给其设定ROI区域
Mat imageROI = srcImage1(Rect(200, 250, logoImage.cols, logoImage.rows));
//3.加载掩膜 必须是灰度图
Mat mask = imread("logo.png", 0);
//4.将掩膜赋值到ROI
logoImage.copyTo(imageROI, mask);
//5.显示结果
namedWindow("用ROI实现叠加窗口");
imshow("用ROI实现叠加窗口", srcImage1);
return true;
}
bool LinearBlending() {
//用addweight函数实现图像线性混合
Mat srcImage2, srcImage3, dstImage;
//读取图像
srcImage2 = imread("3.jpg");
srcImage3 = imread("4.jpg");
addWeighted(srcImage2, 0.5, srcImage3, 0.5, 0.0, dstImage);
//创建并显示窗口
namedWindow("线性混合窗口原图");
imshow("线性混合窗口原图", srcImage2);
namedWindow("线性混合窗口效果图");
imshow("线性混合窗口效果图", dstImage);
return true;
}
bool ROI_LinearBlending() {
Mat srcImage, logoImage;
srcImage = imread("erha.jpg");
logoImage = imread("logo.png");
Mat imageROI = srcImage(Range(250, 250 + logoImage.rows), Range(200, 200 + logoImage.cols));
//将logo加到原图上
addWeighted(imageROI, 0.5, logoImage, 0.5, 0.0, imageROI);
//显示结果
namedWindow("区域线性图像混合");
imshow("区域线性图像混合", srcImage);
return true;
}
Effect
Parse
今天也是对之前学习的一些总结
ROI_AddImage函数是利用感兴趣区域ROI实现图像的叠加
LinearBlending函数是利用addweight函数对图像进行线性混合
ROI_LinearBlending函数在利用感兴趣区域ROI对图像进行线性混合
可能唯一有疑惑的就是ROI_LinearBlending函数为什么输出的感兴趣区域的矩阵,为什么显示原图时,原图会发生变化:Mat在初始化的时候,只有Copyto函数和clone函数才会真正的把数据拷贝出来一份,其他赋值只会复制指针区域,也就是说我们只是拷贝了一份指向相同位置的指针,修改的还是同一份数据。
顺便说一句,为什么蒙版一定是灰度图还是有点奇怪。稍后我会查看它并返回以解决这个问题。
文章出处登录后可见!
已经登录?立即刷新