任意图像转素描:Python分分钟实现
图像转素描效果展示
看到这个标题你可能觉得,我这次终于开始标题党了。然而众所周知,我是标图党~,一般不会做标题党这种事情,既然说了分分钟实现,那就说明——代码在十行左右。
代码虽少,但是效果确实一点都不含糊(即使含糊了…我也给出了调参的空间~)。
按照惯例,先看两张效果图:
还有一张在最上方。
我感觉我肯定是膨胀了,示例图片都敢不全放美女图片了。不全用美女示例图片的另一个原因是,之前做的AI小素只能做脸部的素描,其他部分的素描做的一塌糊涂(训练集只有脸部图片),这次换个天坛这种建筑图片,也能说明这个CV小素的能力要超过AI小素,能对不仅限于人脸人物的任意类型的图片做素描化。说任意类型可能有点夸大,不上线之前确实测试了不少类型的图片,效果都还可以。更多类型的图片效果,期待大家来测试,欢迎拍砖~
图像转素描原理与实现
做这个图像转素描的初衷是因为之前训练了一个肖像转素描的AI模型,还非常中二地命名为【AI小素】,不少小伙伴应该已经在网站上体验过AI小素的素描化效果了。但是AI小素限制太强,只能素描化人脸图片,其他图片则无能为力。因此,我就看了下怎么做任意图片的素描化。
大家一般用PS做图像转素描,谷歌搜索结果排第一的教程流程大概是这样的:
这个教程一共有十六个步骤,但是其实上图展示的这些已经足以说明图像转素描的主要流程了。
图像转素描流程如下:
- 图像去色(上图教程中通过调小饱和度)
- 图像取反
- 取反后的图像进行高斯滤波
- 去色后的图像和取反滤波后的图像以混合模式为颜色减淡进行融合
看到这里,了解PS
的小伙伴们可能已经知道怎么用PS
做素描图了。
下面我们看看如何用Python
实现,仍然用我们最熟悉的OpenCV
。
1. 备图
首先最基础的,准备一张小姐姐的图片,并读取出来备用:
import cv2img_path = "/小/姐/姐/美/图.jpg"
img = cv2.imread(img_path)
2. 去色
说到去色,你可能立刻就想到了灰度化,是的,那就用灰度化吧。代码简单到无需注释和解释,还是直接上码上效果图吧:
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
3. 图像取反
图像取反,乍一听好像很陌生,看完下面这一行更简单的代码你就明白了:
inv = 255 - gray
过于简单了?看效果吧。
状若女鬼,好像要向着恐怖片的方面发展…实际上只是图片中黑白易色,上图中的衣服体现的最为直观。
4. 高斯滤波
最基础的滤波,不多说。
blur = cv2.GaussianBlur(inv, ksize=(ksize, ksize), sigmaX=sigma, sigmaY=sigma)
ksize
和sigma
两个参数可根据实际情况调节,我这里调参的觉得ksize=15, sigma=50
效果还可以。你也可以调节下这两个参数,看看不同参数对最终素描化效果的影响。
状若加了高斯滤镜的女鬼…
5. 颜色减淡混合
实际的混合模式的颜色减淡实现起来比较麻烦,而且速度较慢。有人说下面这一行代码就可以实现颜色减淡的效果,我是极为佩服的:
res = cv2.divide(gray, 255 - blur, scale=255)
梳理一下
梳理一下上面的流程,相当于是,对于灰度图像中的每一个像素值x
,用255 - x
取反之后得到inv_x
,再对此点进行高斯滤波得到blur_inv_x
,然后用执行一下运算进行混合:
x / (255 - blur_inv_x) * 255
从上图可以看到,已经得到了效果不错的素描化图片了。对于有的图片可能素描化之后显得颜色有点淡,没关系,加个伽马变换调节一下就行了。
问题来了
上面是根据PS的流程转化的Python实现流程,感觉实际上起作用的就是这个公式x / (255 - blur_inv_x) * 255
。
上面的流程是:
灰度图->取反->高斯滤波->再取反(除法里面)->除法运算(divide)
。
我们看到,里面有两次取反操作,中间只是多了一个高斯滤波而已。众所周知,负负得正,取反两次相当于没有取反(我真是逻辑鬼才!)
那么问题来了,不取反行不行?行不行?试一下就知道了!
实验流程是下面这样的:
灰度图->高斯滤波->除法运算(divide)
。
公式是:x / blur_x * 255
。
最终的结果是下面这样的:
与取反的差别在哪里呢?仔细看的话,取反的背景会更清晰一些,前景倒没有太大差别。
开始玩
上面已经介绍了素描化的完整实现,接下来就要开始各种玩了。我实现了几种基本的玩法,你看看有多基本:
- 支持动态图
- 素全图
- 素左边
- 素右边
- 素上边
- 素下边
参数可调,效果不好的话,可能需要你亲自动手调节一下:
体验请到www.cvpy.net
找到图像转素描
体验任意图片转素描。
关注公众号【CVPy】及时获取更多有意思的内容。
任意图像转素描:Python分分钟实现相关推荐
- python中如何移动图形工作站_六招教你用Python分分钟构建好玩的深度学习应用
原标题:六招教你用Python分分钟构建好玩的深度学习应用 导读]深度学习是近来数据科学中研究和讨论最多的话题.得益于深度学习的发展,数据科学在近期得到了重大突破,深度学习也因此得到了很多关注.据预测 ...
- Python分分钟实现图书管理系统(含代码)
Python分分钟实现图书管理系统(含代码) 废话不多说,直接上代码. import sys# 打印书库中的所有书的函数 def book_detail(books):for book_name, b ...
- python 素描化图像_任意图像转素描:Python分分钟实现
图像转素描效果展示 看到这个标题你可能觉得,我这次终于开始标题党了.然而众所周知,我是标图党~,一般不会做标题党这种事情,既然说了分分钟实现,那就说明--代码在十行左右. 代码虽少,但是效果确实一点都 ...
- 流弊了!用Python分分钟把微信头像变卡通,油画,素描!
大家好,我是阳哥 今天给大家分享一个非常好玩有趣的Python小程序.微信上的头像都是大家个性展示的舞台,很多人喜欢拿卡通人物做自己的头像,而小姐姐也希望展现有个性的自己的头像照片. 如果我能有一个程 ...
- python画黑白线条_女朋友要你给她画个素描?不要慌,教你用Python分分钟弄出来!...
素描作为一种近乎完美的表现手法有其独特的魅力,随着数字技术的发展,素描早已不再是专业绘画师的专利,今天这篇文章就来讲一讲如何使用python批量获取小姐姐素描画像.文章共分两部分:第一部分介绍两种使用 ...
- 素描风格图片 彩色转素描python pillow库
目录 前言 一.代码展示 二.代码讲解 1.灰度图和高斯模糊 2.素描图生成 总结 前言 素描的一大特点是线条丰富,是以线条来画出物体明暗的单色画.而普通照片大多由色块堆积而成.素描像是一匹黑马,独树 ...
- 用 Python 分分钟让旧照片修复清晰
翻开家里的的相片册,可以看到每张照片都是那么的弥足珍贵,特别是很久以前的照片,都是美好的回忆,还有那些年错过的场景,都被记录下来了,不过可惜的是,随着时间的流逝,照片可能泛黄,出现划痕,画质损失等等, ...
- 老板让我从上千个Excel中筛选数据,利用Python分分钟解决!
大家好,又到了Python办公自动化系列. 今天分享一个真实的办公自动化需求,大家一定要仔细阅读需求说明,在理解需求之后即可体会Python的强大! 一.需求说明 很多人学习python,不知道从何学 ...
- 干货 :六招教你用Python分分钟构建好玩的深度学习应用
[导读]深度学习是近来数据科学中研究和讨论最多的话题.得益于深度学习的发展,数据科学在近期得到了重大突破,深度学习也因此得到了很多关注.据预测,在不久的将来,更多的深度学习应用程序会影响人们的生活.实 ...
- 梦幻风图片?我用Python分分钟做出来!!
本期我们利用卷积神经网络制作一个处理图片的小工具,最终效果对比如下: 原图: 效果图(多张,可以左右滑动): <<< 左右滑动见更多 >>> 具体原理简单来说就是, ...
最新文章
- Object的finalize()方法的作用是否与C++的析构函数作用相同
- CSS:给 input 中 type=text 设置CSS样式
- JavaWeb-综合案例(用户信息)-学习笔记05【分页查询功能】
- [SoapUI] 通过SoapUI发送POST请求,请求的body是JSON格式的数据
- python基础教程免费下载-Python基础教程(第2版)
- iPhone/iPad/iPod touch编程时版本区分
- 尚学堂JAVA基础学习笔记_1/2
- 1、测试面试流程整理记录1
- klouderr什么意思_kid是什么意思_kid的翻译_音标_读音_用法_例句_爱词霸在线词典...
- ElasticSearch 升级过程中给涉及到的术语-1、同步刷新synced flush
- 封闭解、解析解和数值解定义
- 开源工业缺陷数据集汇总,持续更新中(已更新28个)
- Iris Network Traffic Analyzer简易教程
- 海报看起来很普通?数字平原概念设计来制作
- html去除图片链接边框及其链接虚线
- TSN报文优先级(802.1P优先级、IP优先级、TOS优先级)
- Drupal 模块开发基本教程(二)
- Odoo ERP 14 客户关系管理
- Java中身份证、电话号码用星号(****)加以保护
- 数字孪生城市概念与运行机理