python隐藏水印_如何给一千张图片去水印?还好我会python,100行代码轻松搞定

写在前面

近期好多网友私信我,问我编程该怎么学习、怎么入门。我觉得编程学习,就像写文章一样,需要积累。如果把代码每个字符拆开,大伙都认识,但是组合在一起,就是另外一回事了。所以我的建议是,学习编程,从项目入手,从自己感兴趣的项目入手,遇到不懂的语法、算法,就去翻阅书、看视频。如果一开始就去看生硬的语法、晦涩的算法,就像背单词一样,背到第一个单词abandon,就放弃了。

废话不多说,直接上项目,这次是一个批量去除水印的项目。

环境配置:

python版本: 3.6.0

编辑器: pycharm

ps: 每一步都有代码和排版截图,方便学习

代码目录结构

切记刚开始学习的时候,目录结构保持和源码一致

第一步:导入相关的python包# encoding:utf-8import osfrom PIL import Imageimport numpy as npimport imghdr

python包的作用:

os: 本项目只用到了对文件、文件夹的操作。

PIL: Python Imaging Library,是Python平台的图像处理标准库。PIL功能非常强大,API也非常简单易用。安装命令:pip install pillow

numpy: (Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。安装命令:pip install numpy

imghdr: 是一个用来检测图片类型的模块,传递给它的可以是一个文件对象,也可以是一个字节流。

第二步:参数配置类class CONF: input_path = "input_img" # 待处理的图片存放的位置 output_path = "output_img" # 去除水印后的图片存放位置 level_black = 108 # 用于去除水印的特征值 level_white = 170 # 用于去除水印的特征值 is_log = True # 是否打印日志信息

这里是个人编程的习惯,我习惯把一些配置,例如:文件路径、模型存放路径、模型参数统一放在一个类中。当然,实际项目开发的时候,是用config 文本文件存放,不会直接写在代码里,这里为了演示方便,就写在一起,也方便运行。这块代码放在代码文件的开头也方便查看和修改。

第三步:类的初始化class DocWipe: def __init__(self, input_path, output_path, level_black, level_white, is_log): self.input_path = input_path self.output_path = output_path self.level_black = level_black self.level_white = level_white self.is_log = is_log """ 初始化 """ @classmethod def initialize(cls, config): input_path = config.input_path output_path = config.output_path level_black = config.level_black level_white = config.level_white is_log = config.is_log return cls(input_path, output_path, level_black, level_white, is_log)

initialize()函数和__init__()函数 是对象初始化和实例化,其中包括基本参数的赋值、最后返回用户一个对象。这里作为一个类的基本操作,是属于一个通用模板,在大多数项目中,都可以这么去写。为了养成良好的编程习惯,大家可以把这个模板记下来,后续直接套用,修改部分参数就可以了。

第四步: 类的主流程函数""" 主流程 """def wipe_process(self,): if os.path.exists(self.input_path) and os.path.isdir(self.output_path): self.visit_dir_files(self.input_path, self.output_path, self.input_path) if self.is_log: print(u'完成!所有图片已保存至路径' self.output_path) else: print(u'待处理的图片存放的位置 %s, 如果没有请新建目录 %s' % (self.input_path, self.input_path)) print(u'去除水印后的图片存放位置 %s, 如果没有请新建目录 %s' % (self.output_path, self.output_path))

在写代码的时候,一定要抓住主线,就是代码运行的主流程。因为一个完整可靠的项目,它是有很多细枝末节考虑,很多步骤是要分模块来写。主流程就是把主心干确定好,各个模块的入口确定好。这样开发的时候,思路会比较清晰,不会被细节吸引住。这里主心干只有个函数 visit_dir_files()的调用,但是它的外围都是一些边界条件的判定,不重要,但是没有它们程序会出现BUG。

第五步:图像处理算法""" 图片处理 """def img_deal(self, img_path, save_path): img = Image.open(img_path) img = self.levels_deal(img, self.level_black, self.level_white) img_res = Image.fromarray(img.astype('uint8')) if self.is_log: print(u'图片[' img_path u']处理完毕') img_res.save(save_path)""" 图像矩阵处理 """def levels_deal(self, img, black, white): if white

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值