python使用OpenCV模組實現影象的融合示例程式碼
阿新 • • 發佈:2020-04-13
可以通過OpenCV函式cv.add()或簡單地通過numpy操作新增兩個影象,res = img1 + img2.兩個影象應該具有相同的深度和型別,或者第二個影象可以是標量值.
三種融合
注意融合時,一般來說兩個影象的尺寸是一樣大小的,如果大小不一樣,需要把大的影象的某一部分先截出來,與小的圖先融合,再作為整體替換掉原來大圖中摳出的小圖部分。
""" # @Time : 2020/4/3 # @Author : JMChen """ import cv2 as cv img1 = cv.imread('logo.png') img2 = cv.imread('lena.png') # 在lena.png獲取和logo.png大小相同的ROI rows,cols,channels = img1.shape img_ROI1 = img2[0:rows,0:cols] img_ROI2 = cv.addWeighted(img1,0.7,img_ROI1,0.3,0) img2[0:rows,0:cols] = img_ROI2 # 顯示混合後的圖片 cv.imshow('img2',img2) cv.waitKey(0) # 將兩幅影象(lena.png)+ (logo.png)進行融合 img2 = cv.imread('lena.png') # 1,在lena.png獲取和logo.png大小相同的ROI img_ROI1 = img2[0:rows,0:cols] # 2,基於logo.png的灰度圖,利用簡單的閾值分割建立一個掩模 img1_gray = cv.cvtColor(img1,cv.COLOR_BGR2GRAY) ret,mask = cv.threshold(img1_gray,10,255,cv.THRESH_BINARY) mask_inv = cv.bitwise_not(mask) # 3,與掩模進行按位與操作,去掉logo中非0部分,得到新的圖 new_img2 = cv.bitwise_and(img_ROI1,mask=mask_inv) # 4,將新圖與logo相加,然後將這一部分替換掉原始影象的img_ROI1部分 dst = cv.add(img1,new_img2) img2[0:rows,0:cols] = dst cv.imshow('res',img2) cv.waitKey(0) cv.destroyAllWindows() # 實現另一種融合 img2 = cv.imread('lena.png') img_ROI1 = img2[0:rows,0:cols] dst_1 = cv.addWeighted(img_ROI1,0.55,dst,0.45,0:cols] = dst_1 cv.imshow('res_2',img2) cv.waitKey(0) cv.destroyAllWindows()
效果如下:
相關的比例引數可以自己按需調
到此這篇關於python使用OpenCV模組實現影象的融合示例程式碼的文章就介紹到這了,更多相關OpenCV 影象融合內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!