Opencv學習筆記(一):圖像融合函數 addWeighted

正在學習Opencv,把學習過程中的一些知識點記錄下,以供日後翻閱,也給同在學習的朋友參考,有不周全之處,敬請指點。

第一篇學習筆記,mark一下。

 

addWeighted是線性圖像融合函數,可以把兩張圖片疊加在一起

1、ROI
這裏面經常會提到一個名詞ROI,即:感興趣區域,在要處理的圖像中提取出的要處理的區域。比如,你要把 圖A 融合進 圖B 中的一塊區域內,那麼圖B中的這塊區域就是你的圖像處理所關注的重點,你只要對這塊區域進行處理就可以了,可以提高處理效率。

2、函數說明
void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1);

src1:     圖1,可以理解爲背景圖片
alpha:   圖1的權重,即融合比例
src2:     圖2,即要融合的圖片
beta:     圖2的權重;
gamma:偏移量
dst:       融合後的圖片
dtype:   輸出陣列的可選深度

其中兩個權重值還沒有完全理解,取0~1時,基本上是一個透明度,大於1的話會有一些圖像的處理在,有待日後進一步研究。gamma:偏移量這個參數也沒有完全理解,取值很大時圖像會變白。(看來圖像處理這一塊還有很多東西要學啊)。

3、使用函數
有一個問題需要注意,兩個圖片的尺寸是要求一樣的,如果尺寸不同可以用兩個函數解決,一個是使用resize函數調整圖片的大小,一個是隻處理感興趣區域,即在圖片1上選取一塊和圖片2一樣尺寸的區域,然後只對此塊區域進行處理

尺寸一樣時:
Mat image1 = imread("");
Mat image2 = imread("");
Mat dstImage;

addWeighted(image1,0.5, image2, 0.5, 0, dstImage);

namedWindow("test", WINDOW_NORMAL);
imshow("test", image1);

 

尺寸不同時,以ROI爲例:
Mat image1 = imread("");
Mat image2 = imread("");
Mat imageROI = image1(Rect(100, 100, image2.cols, image2.rows));
addWeighted(imageROI, 0.5, image2, 0.5, 0, imageROI );
namedWindow("test", WINDOW_NORMAL);
imshow("test", image1);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章