中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++ 中怎么利用OpenCV實現線性混合操作

發布時間:2021-07-02 17:49:39 來源:億速云 閱讀:244 作者:Leah 欄目:大數據

本篇文章為大家展示了C++ 中怎么利用OpenCV實現線性混合操作,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

線性混合操作

即可以把兩張圖像混合成一張圖像的操作.

圖像線性混合的數學原理

G(x)=(1-a)F(x)+aQ(x)

注意事項:

1,a的取值范圍為0到1之間

2,F(x)和Q(x)為參與混合的兩幅圖像,G(x)表示輸出圖像

3,通過對兩幅圖像的每個像素值做線性加權得到最終的輸出圖像

4,兩幅圖像的大小和類型必須完全一致,如果把圖像當成一個矩陣

則兩個矩陣相加的前提是維度必須一致,否則沒有相加的意義。

addWeighted函數

在OpenCV中用于線性混合操作的API為addWeighted函數

void  addWeighted(InputArray src1,  double  alpha, InputArray src2,  double  beta,  double  gamma, OutputArray dst,  int  dtype=-1); 
  • 第一個參數,InputArray類型的src1,表示需要加權的第一個數組,常常填一個Mat。

  • 第二個參數,alpha,表示第一個數組的權重

  • 第三個參數,src2,表示第二個數組,它需要和第一個數組擁有相同的尺寸和通道數。

  • 第四個參數,beta,表示第二個數組的權重值。

  • 第五個參數,dst,輸出的數組,它和輸入的兩個數組擁有相同的尺寸和通道數。

  • 第六個參數,gamma,一個加到權重總和上的標量值。看下面的式子自然會理解。

  • 第七個參數,dtype,輸出陣列的可選深度,有默認值-1。;當兩個輸入數組具有相同的深度時,這個參數設置為-1(默認值),即等同于src1.depth()。

代碼演示

新建項目

新建一個項目opencv-0006,配置屬性(VS2017配置OpenCV通用屬性),然后在源文件寫入#include和main方法.

C++ 中怎么利用OpenCV實現線性混合操作


加載圖片

然后我們加載圖像用于顯示出來,我們這次需要兩個數據源,所以加載了兩張圖像

C++ 中怎么利用OpenCV實現線性混合操作

C++ 中怎么利用OpenCV實現線性混合操作

然后我們顯示一下看看效果

C++ 中怎么利用OpenCV實現線性混合操作

OK,顯示圖片沒有問題。


addWeighted線性混合操作

我們在操作addWeighted的時候,兩個數據源必須是相同大小的圖像,所以我在們操作之前先輸出一個下看看兩個圖像的高度和寬度是否一致.

C++ 中怎么利用OpenCV實現線性混合操作

C++ 中怎么利用OpenCV實現線性混合操作

運行后發現兩個圖像的寬度差了一個,那在執行addweighted的時候肯定會報錯了.所以我們要加一行調整的代碼,如果判斷寬度和高度有一個不一致,那就把第二個圖像按第一個圖像的大小進行縮放

圖像縮放的API為resize

CV_EXPORTS_W void resize( InputArray src, OutputArray dst,  

                          Size dsize, double fx=0, double fy=0,  

                          int interpolation=INTER_LINEAR ); 

接下來我們加入縮放的判斷,把src2的圖像轉換成src1的大小

C++ 中怎么利用OpenCV實現線性混合操作

這樣我們就可以進行線性混合操作了

C++ 中怎么利用OpenCV實現線性混合操作

其中定義的alpha就是兩個圖像的權重,我們用了0.5比重,第二個圖像就要用到1-0.5效果了,就是說兩個比重加起來要等于1.

我們看一下顯示效果

C++ 中怎么利用OpenCV實現線性混合操作

中間的圖像就是我們通過線性混合操作生成的圖片,接下來我們改一下權重,看看顯示的效果.

C++ 中怎么利用OpenCV實現線性混合操作

將第一個圖像的權重改為0.2,顯示的效果為

C++ 中怎么利用OpenCV實現線性混合操作

明顯可以看出第二張圖顯示的比較清晰.

我們再把第一個圖的權重改為0.7

C++ 中怎么利用OpenCV實現線性混合操作

上述內容就是C++ 中怎么利用OpenCV實現線性混合操作,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

伊春市| 溆浦县| 瑞丽市| 沁源县| 镇安县| 无极县| 竹山县| 蓝田县| 宝山区| 阳东县| 伊吾县| 前郭尔| 桂阳县| 乐清市| 冀州市| 新宁县| 玉田县| 利津县| 吉木乃县| 长乐市| 华阴市| 淮安市| 榕江县| 临江市| 井冈山市| 富源县| 南部县| 离岛区| 喜德县| 天柱县| 邹城市| 托克逊县| 海晏县| 阜新| 茂名市| 新宁县| 东海县| 红河县| 兴安盟| 曲靖市| 桓仁|