您好,登錄后才能下訂單哦!
這篇文章主要介紹了python中opencv怎么實(shí)現(xiàn)圖像邊框添加及圖像混合,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
cv.copyMakeBorder()——實(shí)現(xiàn)邊框填充
主要參數(shù)如下:
參數(shù)一:源圖像——如:讀取的img
參數(shù)二——參數(shù)五分別是:上下左右邊的寬度——單位:像素
參數(shù)六:邊框類型:
cv.BORDER_CONSTANT——cv.BORDER_REPLICATE——cv.BORDER_REFLECT——cv.BORDER_WRAP——cv.BORDER_REFLECT_101——cv.BORDER_TRANSPARENT——cv.BORDER_REFLECT101——cv.BORDER_DEFAULT——cv.BORDER_ISOLATED
參數(shù)七——只在邊框類型選擇borderType == BORDER_CONSTANT,才設(shè)置,意為邊框值
邊框類型的說明:
BORDER_CONSTANT:意為添加指定顏色的邊框——由value值確定:為list
其它參數(shù):(可根據(jù)需要調(diào)制,不過一般前兩個(gè)用的多一些)
代碼實(shí)例
import cv2 as cv import numpy as np if __name__ == "__main__": img = cv.imread('./imag_in_save/open_class.png') cv.namedWindow('imag', cv.WINDOW_NORMAL) cv.resizeWindow('imag', 500, 500) img = cv.copyMakeBorder(img, 20, 20, 20, 20, cv.BORDER_CONSTANT, value=[2, 83, 13]) # 添加邊框 cv.imshow('imag', img) cv.waitKey(0) cv.destroyAllWindows()
效果
cv.addWeighted()——實(shí)現(xiàn)圖像的混合
它的工作原理采用的是一個(gè)簡單權(quán)重公式:g(x)=(1?α)f0(x)+αf1(x)
第一個(gè)參數(shù)為一張圖象,緊跟著第二個(gè)參數(shù)為第一張圖片的權(quán)重(0~1)也就是公式里的(1 - α)
第三個(gè)參數(shù)為另一張需要混合的圖片,同樣的,第四個(gè)參數(shù)為這張圖片的權(quán)重,也就是公式里的(α)
至于第五個(gè)參數(shù):每個(gè)對應(yīng)標(biāo)量的和值——可以設(shè)置混合的高光
其它兩個(gè)參數(shù):(最后的一個(gè)參數(shù)單獨(dú)用的不是很多,在一些其他處理中用的比較多)
dst 輸出數(shù)組,其大小和通道數(shù)與輸入數(shù)組相同(我們一般通過直接返回得到~)
dtype 輸出數(shù)組的可選深度;當(dāng)兩個(gè)輸入數(shù)組的深度相同時(shí),可以將dtype設(shè)置為-1,這等效于src1.depth()
代碼實(shí)例
import cv2 as cv import numpy as np if __name__ == "__main__": img1 = cv.imread(r'./2.png', 1) # 讀取彩色圖片 img2 = cv.imread(r'./3.png', 1) cv.namedWindow('imag', cv.WINDOW_NORMAL) # 窗體 img1 = img1[0: 200, 0: 400] # 截取圖像的指定部分——因?yàn)閳D像混合需要等大的圖像 img2 = img2[0: 200, 0: 400] img = cv.addWeighted(img1, 0.7, img2, 0.3, 0) # 混合圖片——根據(jù)權(quán)重 while True: cv.imshow('imag', img) # 顯示當(dāng)前序列號圖片 k = cv.waitKey(0) & 0xFF if k == 27: break cv.destroyAllWindows()
效果
小練習(xí)(產(chǎn)生類似幻燈片漸變的效果)
首先準(zhǔn)備好一系列等大的圖片或者截取一系列相同大小的圖片區(qū)域作為我們的圖像數(shù)據(jù)
然后將圖像信息,分別拼接到一個(gè)list列表中
然后,實(shí)現(xiàn)一張一張圖片的顯示,在交換的間隙,實(shí)現(xiàn)漸變的效果——也就是圖像混合。
然后就可以欣賞了——不過效果的話,主要看設(shè)置的參數(shù)吧(當(dāng)然因?yàn)闆]有渲染,可能還是有些僵硬)。
代碼示例
import cv2 as cv import numpy as np if __name__ == "__main__": img_list = [] # 創(chuàng)建一個(gè)空序列裝準(zhǔn)備顯示的一系列圖片 counts = 0 # 顯示圖片的序號 cv.namedWindow('imag', cv.WINDOW_NORMAL) # 窗體 cv.resizeWindow('imag', 500, 500) for i in range(2, 7): # 遍歷圖片,憑借到空數(shù)組中——一共5張 img = cv.imread(f'./imag_in_save/scr/{i}.png') # 用f""實(shí)現(xiàn)參數(shù)傳入 img = img[0: 200, 0: 400] # 截取圖像的指定部分——因?yàn)閳D像混合需要等大的圖像 img_list.append(img) # 實(shí)現(xiàn)圖片添加 while True: cv.imshow('imag', img_list[counts]) # 顯示當(dāng)前序列號圖片 k = cv.waitKey(2000) & 0xFF counts += 1 # 循環(huán)下一張圖片——0,1,2,3,4有效 if counts == 5: # 循環(huán)到最后一張圖片后返回到第一張圖片 counts = 0 for i in range(0, 10): k_f = cv.addWeighted(img_list[counts - 1], 1 - (i * 0.1), img_list[counts], i * 0.1, 0) # 做類似漸變的圖像合成 # 實(shí)現(xiàn)兩張(當(dāng)前圖片和接下來顯示的圖片)圖片,不同權(quán)重的混合——由于照片權(quán)重改變來實(shí)現(xiàn)漸變 cv.imshow('imag', k_f) # 顯示混合的圖片 k = cv.waitKey(120) & 0xFF # 延時(shí)和按鍵讀取 if k == 27: # ESC鍵 break if k == 27: break cv.destroyAllWindows()
效果(圖片可能不是很明顯,如有需要可以自己添置幾張圖片實(shí)現(xiàn)看看)
Python主要應(yīng)用于:1、Web開發(fā);2、數(shù)據(jù)科學(xué)研究;3、網(wǎng)絡(luò)爬蟲;4、嵌入式應(yīng)用開發(fā);5、游戲開發(fā);6、桌面應(yīng)用開發(fā)。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“python中opencv怎么實(shí)現(xiàn)圖像邊框添加及圖像混合”這篇文章對大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。