您的位置:首页 > 编程语言 > Python开发

opencv for python (6) 改变一幅图的特定区域 (往一幅图片上加标志)

2017-11-28 23:26 3431 查看
想把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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息