【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);