1. 程式人生 > >opencv for python (6) 改變一幅圖的特定區域 (往一幅圖片上加標誌)

opencv for python (6) 改變一幅圖的特定區域 (往一幅圖片上加標誌)

想把oencv的標誌放在另一幅影象上,如果使用加法,亞瑟會改變,如果使用混合,會得到透明效果,但是我不行要透明,這時就可以運用按位運算來實現。

import cv2  
import numpy as np 

img1 = cv2.imread('opencv.jpg') #原始影象
img2 = cv2.imread('logo.png')   #logo影象,要往原始影象上新增

rows,cols,channels = img2.shape  #得到logo的尺寸
roi  = img1[0:rows,0:cols ]   #在原始影象中擷取logo影象大小的部分

img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY
)#將logo影象灰度化 ret,mask =cv2.threshold(img2gray,200,255,cv2.THRESH_BINARY)#將logo灰度圖二值化,將得到的影象賦值給mask,logo部分的值為255,白色 mask_inv = cv2.bitwise_not(mask) #將mask按位取反,即白變黑,黑變白 img1_bg = cv2.bitwise_and(roi,roi,mask = mask)#將原始影象中擷取的部分做處理,mask中黑色部分按位與運算,即保留黑色部分,保留除logo位置外的部分 img2_fg = cv2.bitwise_and(img2,img2,mask = mask_inv)#將logo影象中,mask_inv部分按位與運算,即保留黑色部分,保留logo
dst = cv2.add(img1_bg,img2_fg) #影象相加 img1[0:rows,0:cols] = dst #影象替換 cv2.imshow('res',img1) cv2.waitKey(0) cv2.destroyAllWindows()