python去水印保存图片,python数字水印
OpenCV基金会
OpenCV(开源计算机视觉库)是一个跨平台的计算机视觉库,实现了图像处理和计算机视觉中的许多通用算法。
环境建设
#python沙盒环境
虚拟opencvenv
source opencvenv/bin/activate
安装加密NDG-HTTPS客户端#一些python版本所需的几个兼容包
pip numpy # opencv的依赖性
#我在这里直接pip安装pyopencv失败。
#对于其他方法,直接从yum包中复制opencv的python包装器
sudo yum安装opencv-python
CP/usr/lib 64/python 2.7/site-packages/cv * opencv _ test/cvenv/lib 64/python 2.7/site-packages/
opencv的常见操作
# -*-编码:utf-8 -*-
导入cv2
#以矩阵形式读取的图像是一个三维列表,每个维度分别代表一行、一列和一个像素,BGR三个颜色通道依次在像素维度列表中。
img=cv2.imread(test.jpg )
Print.shape #使用numpy的shape方法显示图像矩阵的三维尺寸信息,例如:(533,800,3)
Img2=img.copy() #复制图像
2.cvimwrite (save.jpg ,img2) # save
基于OpenCV的两种水印方案
1.基于修复方法(在线方法,处理质量低)
算法原理:基于Telea在2004年提出的快速移动修复算法(FMM算法),首先对待修复区域边缘的像素进行处理,然后逐层向内推进,直到所有像素修复完毕。
处理方法:ui人员会在一个黑色的背景上,同样的位置用白色的水印做一个水印蒙版(只需要一个通道的灰度图像),然后用inpaint的方法对原图进行处理。在具体使用时,可以放大水印区域,这样处理效果会更好。
# -*-编码:utf-8 -*-
导入cv2
Src=cv2.imread(src.jpg) #默认颜色映射(IMREAD_COLOR)用于读入原始图像。
Mask=cv2.imread (mask.jpg ,cv2。im read _ gray)# gray scale(im read _ gray)来读取水印蒙版图像。
# parameter:目标修复映像;掩模图(定位修复区域);选择邻域半径;修复算法(包括INPAINT_TELEA/INPAINT_NS,前者效果更好)
dst=cv2.inpaint(src,mask,3,cv2。INPAINT_TELEA)
cv2.imwrite(result.jpg ,dst)
效果演示
图src:
面具:
INPAINT_TELEA算法处理效果;
INPAINT_NS算法的处理效果;
如果仔细比较的话,INPAINT_TELEA算法会让水印隐藏效果稍微好一点。
2.基于像素的彩色反转中和(高处理质量)
参考自ps水印的原理,原始图像的水印被白色背景上的反色水印图像中和。
# -*-编码:utf-8 -*-
导入cv2
进口数量
src=cv2.imread(src.jpg )
mask=cv2.imread(mask.png )
Save=numpy.zeros (src.shape,numpy.uint8) #创建一个空图像进行保存。
对于范围内的行(src.shape[0]):
对于范围内的列(src.shape[1]):
对于范围内的通道(src.shape[2]):
if mask[row,col,channel]=0:
val=0
否则:
reverse _ val=255-src[行、列、通道]
val=255-reverse _ val * 256/mask[行、列、通道]
如果val 0: val=0
保存[行,列,通道]=val
cv2.imwrite(result.jpg ,保存)
图src:
彩色水印图像:
输出渲染:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。