代码讲解 + 原理分析 + 带你算一遍![[茶杯]](/public/face/f43.png)
代码见【图一】,我也开源到gitee啦,白嫖直接见文末
快速过一遍原理,后面细讲:
获取水印颜色,获取背景颜色,将水印的颜色替换为背景颜色,怎么样,至少原理还是很简单吧
,不要觉得原理是触不可及的高深内容(虽然实现起来稍微花点时间就是了)
主要是怕你们都嫌麻烦直接划走了(/_\),先讲讲简单的原理,留住一点人(卑微),之前的帖子都没几个人回复,估计大部分是点进来划一下就走了~
目前只做了去除简单灰色水印(且主题文字为黑色),咱这个思路只适合最【简单的水印】去除,复杂的建议还是用ps自己慢慢用图章工具抹吧
稍有门槛,前置知识:
线性回归,python,Numpy,OpenCV,rgb基础认知
但我会尽量用基础的表达来阐述整个过程
,同时,涉及到的知识点我也会用【
】符号强调
其实蛮早以前就实现过去水印,那个时候参数都是参考别人训练好的数据,这次重新自己实现了一次,感觉还是蛮有收获的(对于业余爱好者来讲)
那么开始正文
应该都见过【图二】这种水印吧,灰色稍透明点,本文主要针对这种水印,还有嗷,图片去水印目前还没有实现,最好不要轻易尝试,会破坏原有颜色
【rgb颜色表示法】
r即red红,g即green绿,b即blue蓝,这种颜色表示法中rgb为三原色,其余颜色均为这三者混合而来
由于一个色块大小为8bit,所以按十进制来算,它的取值范围是0-255【重点】,值越小越亮,越大越暗,比如rgb(255,0,0),由于r红的位置为255最亮,所以整体呈红色,那么同理rgb(0,255,0),g位置255,为绿
(0,0,0)即三个颜色亮度都最低,自然就是黑色,相反(255,255,255)就是白色了
【颜色获取】
那么如何获取颜色呢?比较简单的方式是找个截图软件拾取(qq自带,ctrl + alt +a,质量一般,我更喜欢snipaste)【图三】,背景肯定是纯白了,然后再获取文字颜色(这步是为了防止文字变色过多)
【线性回归计算】(重点)
不要看到数学就怕,认真思考,具备初中到高中的数学水平一般就能看懂啦,我直接上图手算了(只选了6个点)【图四】
首先我们需要黑色的采样(文字颜色),然后是水印采样和背景采样,我分别选了六个点,我们的目的很简单,就是把水印色替换为背景色,并且尽量保证文字颜色变化不大
现在可以开始列线性回归方程了【图五】,这个是很简单的线性回归,直接带点然后套公式就行了,比较复杂的用计算机或者py就行了【图六】,最终得到如【图七】公式
将公式交给Numpy计算【图一】
(可能选的点少了点,精度不够,我又自行调了下参数,最终按图一给出的数值即可)
n.clip是负责限制值域的函数,第一个参数是列表,剩下为最小值和最大值
如n.clip([0,1,2,3,4], 1, 3),最终会得到[1,1,2,3,3](超过部分设置为最大值),前文也说了颜色最大值为255,这么做是为了保证不超量
最终效果见【图九】
(好像一次只能用15个表情。。)
那么本文就到此为止啦(●'◡'●)
gitee开源地址:
有疑问可以在评论区留言
![[玫瑰]](/public/face/f36.png)
![[彩虹]](/public/face/f38.png)
pluie
![[彩虹]](/public/face/f38.png)
2022-08-16









举报 0