在計算機視覺和圖像處理的領域中,我們常常需要對兩個圖像進行融合,以達到某種合成效果。OpenCV中提供了addWeighted函數,可以實現兩個圖像的疊加融合。本文將詳細介紹這個函數並提供相應的代碼示例。
一、addWeighted介紹
addWeighted函數是OpenCV中用於合成兩張圖像的函數,其函數原型如下:
void cv::addWeighted(
InputArray src1, //第一幅輸入圖像
double alpha, //第一幅圖像的權重
InputArray src2, //第二幅輸入圖像
double beta, //第二幅圖像的權重
double gamma, //亮度調整因子
OutputArray dst, //輸出圖像
int dtype = -1 //輸出圖像的數據類型
);
其中,src1和src2為輸入的兩張圖像,alpha和beta為權重參數,gamma是亮度調整係數,用於調整融合後圖像的整體亮度;dst為輸出圖像,dtype為輸出圖像的數據類型。
addWeighted函數的作用是計算出輸出圖像dst,其中輸出圖像的像素值由下式計算得出:
其中,src1和src2分別乘以alpha和beta表示了兩幅圖像各自的權重,gamma則用於調節融合後圖像的亮度。
二、使用示例
接下來我們將通過幾個實例來演示如何使用addWeighted函數實現圖像融合。
1. 簡單的圖像融合
下面的示例實現了對兩幅圖像進行簡單的加權融合,其中兩幅圖像分別由原圖像和水平翻轉後的圖像構成,權重分別是0.5和0.5。
Mat src1 = imread("image1.jpg");
Mat src2, flip_src2;
flip(src2, flip_src2, 1); //水平翻轉圖像2
Mat dst;
addWeighted(src1, 0.5, flip_src2, 0.5, 0, dst); //圖像融合
imshow("dst", dst);
waitKey(0);
上述代碼中,首先讀入圖像1,並通過flip函數水平翻轉圖像2,然後將兩幅圖像進行融合,得到輸出圖像dst。
2. 對圖像添加遮罩
在實際應用中,我們可能需要在一幅圖像上添加一些遮罩,以達到特定的效果。下面的示例演示了如何在一張圖像上添加一個不透明的矩形遮罩,以達到將圖像中心區域變亮的效果。
Mat src = imread("image.jpg");
Mat mask(src.size(), CV_8UC1, Scalar(0));
Rect roi(src.cols/4, src.rows/4, src.cols/2, src.rows/2);
mask(roi) = Scalar(255);
Mat dst;
addWeighted(src, 1.0, src, 0.4, 0, dst, -1, mask);
imshow("dst", dst);
waitKey(0);
上述代碼中,我們首先讀入圖像,並定義一個與其尺寸相同的遮罩mask,將遮罩初始值設為0。然後我們定義了一個矩形roi,用於限制要處理的圖像區域。接著,我們將矩形區域在遮罩中對應的像素值設為255,表示該區域是不透明的。最後,我們將圖像src與圖像src的0.4倍進行加權融合,並輸出輸出圖像dst,mask參數用於指定融合的像素點。
3. 融合彩色圖像
下面的例子演示了如何融合彩色圖像,其中兩幅圖像分別由原圖像和將原圖像轉換為灰度圖像後再轉換為彩色圖像得到的圖像構成,權重分別是0.5和0.5。
Mat src = imread("image.jpg");
cvtColor(src, src, COLOR_BGR2GRAY); //轉灰度圖像
cvtColor(src, src, COLOR_GRAY2BGR); //轉彩色圖像
Mat src_gray;
cvtColor(src, src_gray, COLOR_BGR2GRAY); //轉灰度圖像
Mat dst;
addWeighted(src, 0.5, src_gray, 0.5, 0, dst);
imshow("dst", dst);
waitKey(0);
上述代碼中,我們首先將圖像轉換為灰度圖像,然後通過轉換回彩色圖像得到一張與原圖像尺寸相同的彩色圖像。接著,我們又將彩色圖像轉換為灰度圖像,得到一張與原圖像尺寸相同的灰度圖像,用於和原圖像進行融合。最後,我們將原圖像和灰度圖像進行融合,得到融合後的輸出圖像dst。
三、總結
addWeighted是一個非常實用的函數,在計算機視覺和圖像處理領域有著廣泛的應用。本文介紹了addWeighted的函數原型和使用方法,並給出了幾個代碼示例,希望能夠幫助讀者更加深入地了解和掌握OpenCV中這個重要的圖像處理函數。
原創文章,作者:CLNP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/131571.html