任意图像转素描:Python分分钟实现


任意图像转素描:Python分分钟实现

文章插图
 
看到这个标题你可能觉得 , 我这次终于开始标题党了 。然而众所周知 , 我是标图党~ , 一般不会做标题党这种事情 , 既然说了分分钟实现 , 那就说明——代码在十行左右 。
代码虽少 , 但是效果确实一点都不含糊(即使含糊了....我也给出了调参的空间~) 。
按照惯例 , 先看两张效果图:
任意图像转素描:Python分分钟实现

文章插图
 
还有一张在最上方 。
我感觉我肯定是膨胀了 , 示例图片都敢不全放美女图片了 。不全用美女示例图片的另一个原因是 , 之前做的AI小素只能做脸部的素描 , 其他部分的素描做的一塌糊涂(训练集只有脸部图片) , 这次换个天坛这种建筑图片 , 也能说明这个CV小素的能力要超过AI小素 , 能对不仅限于人脸人物的任意类型的图片做素描化 。说任意类型可能有点夸大 , 不上线之前确实测试了不少类型的图片 , 效果都还可以 。更多类型的图片效果 , 期待大家来测试 , 欢迎拍砖~
图像转素描原理与实现做这个图像转素描的初衷是因为之前训练了一个肖像转素描的AI模型 , 还非常中二地命名为【AI小素】 , 不少小伙伴应该已经在网站上体验过AI小素的素描化效果了 。但是AI小素限制太强 , 只能素描化人脸图片 , 其他图片则无能为力 。因此 , 我就看了下怎么做任意图片的素描化 。
大家一般用PS做图像转素描 , 谷歌搜索结果排第一的教程流程大概是这样的:
任意图像转素描:Python分分钟实现

文章插图
 
这个教程一共有十六个步骤 , 但是其实上图展示的这些已经足以说明图像转素描的主要流程了 。
图像转素描流程如下:
  1. 图像去色(上图教程中通过调小饱和度)
  2. 图像取反
  3. 取反后的图像进行高斯滤波
  4. 去色后的图像和取反滤波后的图像以混合模式为颜色减淡进行融合
看到这里 , 了解PS的小伙伴们可能已经知道怎么用PS做素描图了 。
下面我们看看如何用Python实现 , 仍然用我们最熟悉的OpenCV 。
1. 备图首先最基础的 , 准备一张小姐姐的图片 , 并读取出来备用:
import cv2img_path = "/小/姐/姐/美/图.jpg"img = cv2.imread(img_path)
任意图像转素描:Python分分钟实现

文章插图
 
2. 去色说到去色 , 你可能立刻就想到了灰度化 , 是的 , 那就用灰度化吧 。代码简单到无需注释和解释 , 还是直接上码上效果图吧:
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
任意图像转素描:Python分分钟实现

文章插图
 
3. 图像取反图像取反 , 乍一听好像很陌生 , 看完下面这一行更简单的代码你就明白了:
inv = 255 - gray过于简单了?看效果吧 。
任意图像转素描:Python分分钟实现

文章插图
 
状若女鬼 , 好像要向着恐怖片的方面发展......实际上只是图片中黑白易色 , 上图中的衣服体现的最为直观 。
4. 高斯滤波最基础的滤波 , 不多说 。
blur = cv2.GaussianBlur(inv, ksize=(ksize, ksize), sigmaX=sigma, sigmaY=sigma)ksize和sigma两个参数可根据实际情况调节 , 我这里调参的觉得ksize=15, sigma=50效果还可以 。你也可以调节下这两个参数 , 看看不同参数对最终素描化效果的影响 。
任意图像转素描:Python分分钟实现

文章插图
 
状若加了高斯滤镜的女鬼......
5. 颜色减淡混合实际的混合模式的颜色减淡实现起来比较麻烦 , 而且速度较慢 。有人说下面这一行代码就可以实现颜色减淡的效果 , 我是极为佩服的:
res = cv2.divide(gray, 255 - blur, scale=255)
任意图像转素描:Python分分钟实现

文章插图


推荐阅读