给图片加水印/logo 涉及opencv python 掩码 cv2.bitwise_and()代码的特殊用法 水印的正确添加步骤 图像位运算 等知识点

import cv2
import numpy as np
 
#绘制logo
 
img = cv2.imread('D:\\123.PNG') #读取需要加水印的图片
 
logo = np.zeros((200,200,3),np.uint8) #创建logo(其实是包括logo在内的一片区域)
logo[130:180,30:170] = (0,0,255)  #真正的绘制了logo
logo[20:150,70:130] = (255,0,0)   #真正的绘制了logo
 
mask = np.zeros((200,200),np.uint8)  #为掩码制作区域,尺寸必然与logo区域一致,解释见原文
mask[130:180,30:170] = 255  #掩码中logo真正占的区域,必然与logo真正的尺寸一致,解视见原文
mask[20:150,70:130] =255  #掩码中logo真正占的区域,必然与logo真正的尺寸一致,解视见原文
 
m = cv2.bitwise_not(mask) #这一步之前的掩码区域是,黑色的背景值为0,logo在掩码中的区域为白色值为1
                          #这段代码是通过非操作,使得背景值都变为1,logo占的区域变为0,为后续做铺垫
 
roi = img[0:200,0:200] #读取原图中打水印的区域,尺寸必然与mask尺寸一致,因为bitwise_and要求图片尺寸一致
 
tmp = cv2.bitwise_and(roi,roi, mask = m) #tmp temporary临时变量  与操作也就是求交集
                                         #此时m中logo在掩码中占的区域值都为0,与原图进行与操作也就是取交集自然得到空集,也就是0
           #这步完成后,就得到了一个包含取出的原图区域且logo需要占有的区域值为0的结果,这样在将logo加入进去,就不会影响logo真实的色彩
           #如果抛弃这些步骤,直接画好logo,通过add或者addweighted操作,都会使加入图片的logo色彩不是我们想要的颜色
 
dst = cv2.add(tmp,logo)   #dst destination目标  将tmp与logo加起来,也就得到了加好logo的原图的一部分
 
img[0:200,0:200] = dst   #直接赋值,将原图中x范围0~200;y范围:0~200;尺寸为200x200的区域 赋dst的值,也就是将dst这个图加进了原图中
cv2.imshow('logo' , logo)
cv2.imshow('musk' , mask)
cv2.imshow('m',m)
cv2.imshow('roi',roi)
cv2.imshow('tmp' , tmp)
cv2.imshow('img',img)
cv2.waitKey(0)
 
#有不懂的兄弟尽管问我,就当让我复习了,还有就是第21行这段代码不太好理解,在原文中都有解答,也可以评论提问!

这段代码进行了详细的标注,对每行内容进行了解释,相信就算是一个新手也能看懂一二

这张图片是每个窗口的运行效果图

有想复刻,或者有问题的马友可以评论提问,就当让我复习了,一定知无不答,本人近期活跃于CSDN,回复效率高👍

最后献上一张图,激励各位马友

添加的色彩为(255,255,200)不谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值