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()

你可能感兴趣的:(opencv for python (6) 改变一幅图的特定区域 (往一幅图片上加标志))