opencv for python (6) 改變一幅圖的特定區域 (往一幅圖片上加標誌)
阿新 • • 發佈:2019-01-23
想把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()