【OpenCV入门教程之四】 ROI区域图像叠加&初级图像混合 全剖析
- ROI: region of interest 感兴趣区域
- addWeighted 是常用的图像融合函数
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv; // OpenCV中的C++类和函数都是定义在命名空间cv之内的
int main() {
// 背景图,logo
Mat image = imread("../pictures/dota.jpg"); // 默认第2个参数flags=1,(flags>0 返回一个3通道的彩色图像)
Mat logo = imread("../pictures/logo.jpg");
// 显示原图像的窗口
namedWindow("image"); // mac标题栏不能显示中文
imshow("image", image);
// ROI: region of interest 感兴趣区域
Mat imageROI = image(Rect(800, 10, logo.cols, logo.rows)); // 定义image中的ROI区域(区域大小=logo大小)
// 或者
// Mat imageROI = image(Range(350, 350 + logo.rows), Range(800, 800 + logo.cols));
// 图像混合操作
// computes weighted sum of two arrays (dst = alpha*src1 + beta*src2 + gamma)
// gamma 可以理解为偏置
addWeighted(imageROI, 0.5, logo, 0.5, 0, imageROI);
// 显示融合后图像的窗口
namedWindow("image+logo");
imshow("image+logo", image);
// 输出图像
imwrite("../pictures/dota+logo.jpg", image);
waitKey(3000);
}
addWeighted 函数
//! computes weighted sum of two arrays (dst = alpha*src1 + beta*src2 + gamma)
CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2,
double beta, double gamma, OutputArray dst, int dtype=-1);