本篇文章為大家展示了C++ 中怎么利用OpenCV實(shí)現(xiàn)線(xiàn)性混合操作,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
目前創(chuàng)新互聯(lián)公司已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、綿陽(yáng)服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、曾都網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
線(xiàn)性混合操作
即可以把兩張圖像混合成一張圖像的操作.
圖像線(xiàn)性混合的數(shù)學(xué)原理
G(x)=(1-a)F(x)+aQ(x)
注意事項(xiàng):
1,a的取值范圍為0到1之間
2,F(xiàn)(x)和Q(x)為參與混合的兩幅圖像,G(x)表示輸出圖像
3,通過(guò)對(duì)兩幅圖像的每個(gè)像素值做線(xiàn)性加權(quán)得到最終的輸出圖像
4,兩幅圖像的大小和類(lèi)型必須完全一致,如果把圖像當(dāng)成一個(gè)矩陣
則兩個(gè)矩陣相加的前提是維度必須一致,否則沒(méi)有相加的意義。
addWeighted函數(shù)
在OpenCV中用于線(xiàn)性混合操作的API為addWeighted函數(shù)
void
addWeighted(InputArray src1,
double
alpha, InputArray src2,
double
beta,
double
gamma, OutputArray dst,
int
dtype=-1);
第一個(gè)參數(shù),InputArray類(lèi)型的src1,表示需要加權(quán)的第一個(gè)數(shù)組,常常填一個(gè)Mat。
第二個(gè)參數(shù),alpha,表示第一個(gè)數(shù)組的權(quán)重
第三個(gè)參數(shù),src2,表示第二個(gè)數(shù)組,它需要和第一個(gè)數(shù)組擁有相同的尺寸和通道數(shù)。
第四個(gè)參數(shù),beta,表示第二個(gè)數(shù)組的權(quán)重值。
第五個(gè)參數(shù),dst,輸出的數(shù)組,它和輸入的兩個(gè)數(shù)組擁有相同的尺寸和通道數(shù)。
第六個(gè)參數(shù),gamma,一個(gè)加到權(quán)重總和上的標(biāo)量值??聪旅娴氖阶幼匀粫?huì)理解。
第七個(gè)參數(shù),dtype,輸出陣列的可選深度,有默認(rèn)值-1。;當(dāng)兩個(gè)輸入數(shù)組具有相同的深度時(shí),這個(gè)參數(shù)設(shè)置為-1(默認(rèn)值),即等同于src1.depth()。
代碼演示
新建項(xiàng)目
新建一個(gè)項(xiàng)目opencv-0006,配置屬性(VS2017配置OpenCV通用屬性),然后在源文件寫(xiě)入#include和main方法.
加載圖片
然后我們加載圖像用于顯示出來(lái),我們這次需要兩個(gè)數(shù)據(jù)源,所以加載了兩張圖像
然后我們顯示一下看看效果
OK,顯示圖片沒(méi)有問(wèn)題。
addWeighted線(xiàn)性混合操作
我們?cè)诓僮鱝ddWeighted的時(shí)候,兩個(gè)數(shù)據(jù)源必須是相同大小的圖像,所以我在們操作之前先輸出一個(gè)下看看兩個(gè)圖像的高度和寬度是否一致.
運(yùn)行后發(fā)現(xiàn)兩個(gè)圖像的寬度差了一個(gè),那在執(zhí)行addweighted的時(shí)候肯定會(huì)報(bào)錯(cuò)了.所以我們要加一行調(diào)整的代碼,如果判斷寬度和高度有一個(gè)不一致,那就把第二個(gè)圖像按第一個(gè)圖像的大小進(jìn)行縮放
圖像縮放的API為resize
CV_EXPORTS_W void resize( InputArray src, OutputArray dst,
Size dsize, double fx=0, double fy=0,
int interpolation=INTER_LINEAR );
接下來(lái)我們加入縮放的判斷,把src2的圖像轉(zhuǎn)換成src1的大小
這樣我們就可以進(jìn)行線(xiàn)性混合操作了
其中定義的alpha就是兩個(gè)圖像的權(quán)重,我們用了0.5比重,第二個(gè)圖像就要用到1-0.5效果了,就是說(shuō)兩個(gè)比重加起來(lái)要等于1.
我們看一下顯示效果
中間的圖像就是我們通過(guò)線(xiàn)性混合操作生成的圖片,接下來(lái)我們改一下權(quán)重,看看顯示的效果.
將第一個(gè)圖像的權(quán)重改為0.2,顯示的效果為
明顯可以看出第二張圖顯示的比較清晰.
我們?cè)侔训谝粋€(gè)圖的權(quán)重改為0.7
上述內(nèi)容就是C++ 中怎么利用OpenCV實(shí)現(xiàn)線(xiàn)性混合操作,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
新聞名稱(chēng):C++中怎么利用OpenCV實(shí)現(xiàn)線(xiàn)性混合操作
網(wǎng)站鏈接:http://www.rwnh.cn/article20/gpogco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、定制開(kāi)發(fā)、網(wǎng)頁(yè)設(shè)計(jì)公司、品牌網(wǎng)站制作、網(wǎng)站導(dǎo)航、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)