关于专用软件,由于我的这方面的需求极少,我才不会为了这种破事儿去专门搞一个软件呢。至于Photoshop,我电脑里装有这个,但是一般只用于两件事,有人(比如老板)叫我用photoshop修一下图或者做一个什么图标,还有就是把博客里面上传的图的背景搞成透明(考虑到以后可能博客主题背景不是白色,所以一般图片我都会把背景弄成透明的以适应背景颜色,比如本文下面的大部分图片其实背景都是透明而不是白色的。。),至于PS用于去水印嘛,以前学习PS的时候试过,但是效果感觉不好,果然我就是和PS气场不和。。 对我而言,最幸运的事就是Mathematica正好有一个Inpaint函数可以来修图去水印,更加幸运的是,Mma语法支持直接把图片当做参数直接传进去,这样就把使用的便捷程度Level MAX了!! 对于这个函数,先看几个官方文档里面的几个例子: e.g. e.g. e.g. 3 可以看出这个函数本身就很强大,需要两个参数,原图片和抠图的MASK,而且事实上还可以添加第三个参数说明用什么算法来修图,这个我们就不管了,感兴趣的可以去看Mma的文档。 为了实现轻而易举的去水印,我们可以先看一下下面这个极具启发性的例子 它完美地去掉了图片右下的日期标记,而且和上面相比最大的区别是,没有出现黑白的MASK图片了,我给大家解释一下思路,其实它是有Mask的,用的是二值化函数Binarize来生成二值黑白图片,生成的准则是把原图片分成RGB三层(ColorSeparate),然后把所有R层像素值大于255×0.93的设成白色,其余黑色,所以本质还是和上面的一样。【由于考虑到图片可能有损压缩导致边缘模糊,所以最后用了一个形态学处理函数Dilation】 以此为基础,我就想到了一个操作上很简单的去水印的方法,比如我们要对下面这幅图去掉左上角的文字和图片中间的人,显然的,还要去掉倒影 然后我们用最传统的工具——————QQ截图,然后在上面用画刷涂抹我们想要去掉的部分,请不要问我是怎么截到QQ截图的画面的 这里涂抹的原则有三个,第一,画刷区域宜大不宜小,第二,请尽量不要不小心在画刷区域留下空洞,哪怕一个像素点!除非你本身刻意而为之,第三,画刷颜色一定要挑图片中没出现过的颜色,比如上图中用到的红色。 然后要做的事情就很简单了,首先和之前一样把纯红色(RGB=#F00)的部分用Binarize扣出来做成模板,然后考虑到QQ截图出来的图不一定可以做到和原图大小一样,所以再来一个缩放MASK图片到与原图一样就可以了。 之后去水印就是一行代码的事儿,最后两个参数分别就是原图和QQ截图画刷处理的图: Inpaint[#1,ImageResize[Binarize[#2,#=={1,0,0}&], ImageDimensions@#1]]&[img,mask] 结果如下 所以一般我去除水印的方法就是:打开Mma,然后Ctrl C,Ctrl V上面一行代码,把待处理图片直接贴上去,QQ截图抹两下,运行,收工。 没用过Mathematica的同学是不是觉得可以直接把图片作为参数来编程简直爽炸天?! |
|
来自: 非线性co7vtwr8 > 《windows》