谈一谈|可见水印数据集生成技术

引言为图片添加水印在生活中是一个十分常见的问题,有时候为了达到自己想要的效果,人们往往采用PS的方式。这种方式需要对图片进行P图处理,对于一些PS小白来说,P图的步骤太过于繁琐且容易造成视觉疲劳,因此这里提出一种利用计算机自己生成可见水印图片的方法。一 可见水印图片构成通常,以人眼视觉的角度看,图片中水印部分就像是“粘贴”在原图上的,很多添加水印的方法也正是如此,只不过“粘贴”的不单单是水印部分,还有其他的透明部分,从而在“粘贴”水印的同时不影响图片的正常显示效果。而“粘贴”的这层水印图片,一般被叫做蒙版。假设一张含有水印的图片为I(p),原图为W(p),蒙版为J(p),设水印蒙版的不透明度为α,由于最终图片I(p)的不透明度为1,所以原图W(p)的不透明度就为(1-α)。则对于一张含水印的图片来说有:I(p)=α*J(p)+(1-α)*W(p)    (1)式根据(1)式,可以知道生成可见水印图片的关键在于如何获取水印蒙版。二 如何生成水印蒙版在生活中,水印的样式比较多,这里介绍可见水印覆盖全图的图像生成技术。2.1 思路方法在创建蒙版之前,需要先获取原图的尺寸,这样生成的蒙版才可以和原图进行(1)式运算。首先创建一个和原图尺寸一样的矩阵(包括图片的通道数),然后将每个位置的像素值进行初始化,将他们设置为纯白色(对应三个通道的像素值均为255)。创建完矩阵之后,将指定位置的像素值更改为对应水印位置的像素值,这里以如下水印和原图为例

图2.1.1某品牌水印图

图2.1.2不含水印的图片2.2 python代码def GenerateWatermarks(file1,file2):#file1是原图地址,file2是水印地址watermark = cv.imread(file2)wide  = watermark.shape[0]high  = watermark.shape[1]img  = cv.imread(file1)mask  = cv.imread(file1)# 将水印覆盖到蒙版上for  i in range(len(mask)):for j in range(len(mask[i])):mask[i][j] = watermark[i % wide][j % high]# 保存蒙版cv.imwrite(file2+'_mask.png',  mask)

图2.2.1 全图水印蒙版三 生成可见水印数据集得到了水印蒙版之后,利用(1)式的原理,生成新图片,这里介绍opencv中内置的函数addWeighted来实现,具体用法参考如下:Res=cv2.addWeighted(img1,α,img2,1-α,0),其中img1是水印蒙版,α是它的不透明度,img2是原图片,1-α是它的不透明度,0是函数必带参数(水印蒙版和原图片可以交换位置,但是需要注意的是不透明度也需要同时交换位置)。将得到的水印蒙版和原图片带入到函数中,就可以得到新图片,同时不要忘记使用cv2.write()函数保存得到的图片。将图2.1.2和图2.2.1带入函数,不透明度分别设置为0.5和0.5,得到的可见水印图片如下:

图3.1 可见水印图片由于两张图片叠加之后原图和水印的显示效果都有所减弱,所以在合并两张图片之前,可以先对水印部分进行增强,然后再将原图的不透明度增大,得到新的显示效果:

图3.2 调整后的可见水印图片四 总结可见水印数据集的生成可以总结成以下步骤:读取水印和原图、根据原图生成水印蒙版、将水印覆盖到蒙版上、对蒙版上的水印部分进行增强、叠加原图和蒙版。需要注意的是,水印部分增强和叠加两张图片时没有明确的参数规定,可根据自身要求来确定;同时,添加水印的方式也是多种多样的,不需要拘泥于本文这一种,只要掌握了方法,就可以给图片添加上自己想要的水印效果。主编:王楠岚责编 :黄章鱼能力越强,责任越大。实事求是,严谨细致。(where2go团队)微信号:算法与编程之美

(0)

相关推荐