概述
今年阳光高考公示的自主招生名单变成了图片格式,还加了水印,(洪主编说“今年阳光高考变坏了”:joy:),确实是变坏了,无形中给我增添了不少工作:angry:,那么要转为Excel,就要进行文字识别,就需要先把烦人的水印去除掉。
本文分为两部分:
- 基于OpenCV的图片水印去除
- 将python脚本封装为可执行exe程序
去除水印
先放原图:
观察上图,可以得到如下结论:
图片本身就是灰度图,也就是各个像素的RGB是相等的;
水印的位置并不固定,没办法针对某一位置单独处理;
水印颜色统一;
水印颜色与文字颜色相差较多,水印颜色要比文字颜色浅;
让我做PS是不可能的,因为还有上百张这样的图片。
所以,我们可以从颜色上入手,直接用OpenCV中的Image Thresholding函数,选择介于文字与水印灰度中间的某一值作为阈值,然后将大于该阈值的值替换为255(白色),小于该阈值的值替换为0(黑色),这样便可以把图片中所有水印(包括表头的阴影)都去除掉了。
颜色拾取
为了选择阈值,我们得先看一下文字和水印的RGB,我是用的Colors Pro(随便下一个颜色识别器或者用Office/PS等都可以)。
识别结果如上:
文字的灰度介于50~140之间;水印及阴影的灰度介于220-240之间,所以我们可以选择200作为阈值。
关键代码
1 | cv2.threshold(img, 200, 255, cv2.THRESH_BINARY)[1] |
去除水印后的效果:
去水印的速度非常快(不到一秒一张图),效果也很不错,不仅去除了水印,还把原来偏灰色的文字变成了黑色,更方便下一步的文字识别工作。
但,同事也有这种需求,就索性封装一个可执行文件exe给他备用,本来以为很简单的事儿,折腾了我一整个晚上:joy:,下面分享下我封装python脚本时踩的坑。
程序封装
参考stackoverflow上a-good-python-to-exe-compiler的答案,大家都在推荐Pyinstaller,所以就是它了。
Pyinstaller的使用方法非常简单,只需
1 | #安装 |
然后在命令行中进入到目标脚本的文件夹下,输入
1 | #-F为附加的参数,效果为只输出单个的exe文件,拷给基友用更方便 |
就可以在生成的hist
文件夹下找到封装好的exe文件了:smile:。
然而事情的真相是,各种Permission Denied
,网上的解决方法是用管理员模式运行
,对于我这电脑来说然并卵。折腾了一晚上,终于通过安装了下面两个库解决了:
- 重新安装pywin32,参考:如何下载和安装pywin32(亲测有效)
- 下载安装了vc++2018运行库的合集(因为以前大学打游戏,常被这个问题困扰,这次死马当活马医,居然医活了。。。)
总结
这个去水印小工具,只能针对类似文中的这种灰度图进行水印处理,如果你想去除彩色图片的水印,请打开PS,然后用Shift+F5盘它!
最后附上这个去水印小工具:链接, 密码:r38ev8
使用方法:
自行搜索安装vc++2018运行库合集
把exe复制到你要处理图片的文件夹
打开,输入阈值灰度
回车,处理好的图片会自动储存在
removed
文件夹下
运行效果:
参考
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。