OpenCV-Python教程:57.图像修复

Python012

OpenCV-Python教程:57.图像修复,第1张

基础

你们可能家里都会有一些老照片已经有黑点啊,划痕啊等。你有想过修复它们么?我们不能简单的在绘图工具里把他们擦除了就完了。因为这样只是把黑色的东西变成白色的而已,实际上没用。在这种情况下,会用到一种技术叫图像修复。基本的思想很简单:用周围的像素替换坏掉的像素,这样看上去就和周围一样了。比如下面这张:

很多算法被设计来干这个,OpenCV提供了两个,可以用同一个函数来访问: cv2.inpaint()

第一个算法是基于论文" An Image Inpainting Technique Based on the Fast Marching Method"。 是基于快速匹配方法的。假设图像里的一个区域要修复。算法从这个区域的边界开始,逐渐地进入区域,把边界内的所有东西填充上。它取要修复的部分周围的一个像素周围的一小片邻居。这个像素被周围已知的像素的标准加权和替换掉。选择权重是很重要的。要修复的点周围像素的权重较高。和正常边界近的,还有在边界轮廓上的像素的权重较高。当像素被修复以后,它会通过快速匹配方法(FMM)移动到最近的像素。FMM保证那些已知像素周围的像素首先被修复,所以这个就像人工启发式的操作一样。这个算法使用标志cv2.INPAINT_TELEA开启。

第二个算法基于论文" Navier-Stokes, Fluid Dynamics, and Image and Video Inpainting ".这个算法基于流体动力学和偏微分方程。基本原则是启发式。它首从已知区域先沿着边缘到未知区域访问(由于边缘应该是连续的)。在匹配边要修复区域边界的梯度向量时持续画等值线(把相同亮度的点用线连起来,类似于轮廓线)。这时候用到流体动力学。之后会填充颜色以减小最小方差。这个算法用标志cv2.INPAINT_NS启用。

编码

我们需要创建和输入图像相同大小的掩图,需要修复的区域对应的像素要非0.剩下的就简单了。我的图像被一些黑色划痕给破坏了(实际上是我自己加的)。我用绘图工具对应的标记出来。

看下面的结果。第一个图片是输入图像,第二个是掩图,第三个是用第一种算法的结果,最后一张是第二种算法的结果。

END

我们平时要给图片加水印,但是又不会PS,免不了着急上火,还找不到人,想想还是得自己学一手~

而且图片很多的话,PS还是挺慢的,用Python一键生成即可,效率杠杠的。

准备工作

环境的话我这里使用的是 Python 和 pycharm

如果添加一张图片的水印,两行代码就实现了。

本次使用的模块是 filestools , 第三方模块,咱们需要手动安装一下。

win+r打开搜索框,输入cmd 按确定后弹出命令提示符窗口,输入 pip install filestools 即可安装成功。

代码解析

1、单张图片添加水印

模块导入

怎么使用 filestools 模块呢?

首先导入模块里面的一个方法,watermarker ,点上 marker ,然后 import add_mark

add_mark 已经包含了很多方法

file 是添加水印照片 ,mark 使用哪些字作为水印,out 保存的地方 ,color 颜色,size 水印字体的大小,opacity 不透明度,space 字体间距,angle 旋转角度。

假设我要给图片添加上:人生苦短, 快学python

咱们把图片和文字加进去即可,代码如下:

2、批量填加多张图片水印

批量给图片添加的话,需要用到 OS 模块。

导入一下

用os模块读取文件夹所有内容 ,使用 files 接收。

打印一下

现在所有文件名字都有了

通过 for 循环遍历都打印出来

然后将文件添加进去,我们读取的是 img_1 里面的内容,那就把这个文件里的内容都传进去,保存数据的时候,都会保存在这里面。

再改一下透明度

我这里改成0.5

这样就清晰多了~

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

对于动漫,大家一定都不陌生,我周围的不少单身码农都是动漫迷。我也是一个资深动漫迷,动漫里面有好多漂亮的小姐姐,比如斗破苍穹的美杜莎,云韵,萧薰儿,天行九歌里面紫女,焰灵姬。当然女孩也有自己的动漫情怀,部门里面还有小姐姐喜欢cosplay呢~~

于是乎我想既然Python无所不能,不如用Python做一个小程序帮小姐姐的头像转成漫画,以后也可以搭讪一下部门的小姐姐,吹嘘一把!哈哈,想想都幸福,于是熬了一夜,总于完成了这个小程序。

1

首先,我们来看一下,漫画和我们的照片的区别,如下图所示:

2

图片转漫画——减少色彩

图片转漫画——减少色彩

有了上述的两个细节的描述,我们接下来的程序,也将围绕着这两点进行展开。

其对应的程序入下图所示:

上述程序中,我们需要注意的一点就是对于输入的图片我们必须要调整图片尺寸为4的整数倍,因为在金字塔下采样的过程中,图片会默认降到原先尺寸的1/4大小,如果无法除尽的话,程序会自动向上取整,这样的话,我们上采样之后,模糊的图片和最初输入的图片在分辨率上会有些许的差别,这样会使后面的程序保存。

3

完成了上面几步之后,我们接着要进行增强轮廓了。我们的程序如下图所示:

上述的程序中,我们利用opencv的自适应阈值函数来分割轮廓,然后将我们的轮廓图片和模糊后的图片按照轮廓图片的数值进行与操作,最终得到我们的漫画图片。

以上便是程序的核心部分,接下来我们用Python里面的著名框架flask程序做一个简单额网站页面。

4

对于flask程序,想必大家或多或少都有一定的了解,我们所使用的flask程序非常简单,我简单的说一下思路和步骤: