目录

前言

一、代码展示

二、代码讲解

1.灰度图和高斯模糊

2.素描图生成

总结


前言

素描的一大特点是线条丰富,是以线条来画出物体明暗的单色画。而普通照片大多由色块堆积而成。素描像是一匹黑马,独树一帜。虽然乍一看平平无奇,仔细端详却是耐人寻味。让我们了解一下如何通过程序将普通的色彩图片转换成素描风格的画作吧。


一、代码展示

from PIL import Image, ImageOps, ImageFilter
import matplotlib.pyplot as plt
img=Image.open("soldier1.jpg")
width,height=img.size#序列解包_,axes=plt.subplots(1,2,figsize=(30,30))
axes[0].imshow(img)
axes[0].set_title("original")#灰度图
img_gray=img.convert("L")#L是灰度图的表示,这行代码生成灰度图
plt.rcParams["image.cmap"]="gray"
img_invert=ImageOps.invert(img_gray)#反色功能
img_gaussian=img_invert.filter(ImageFilter.GaussianBlur(10))#高斯模糊功能for x in range(width):for y in range(height):pos=(x,y)A=img_gray.getpixel(pos)B=img_gaussian.getpixel(pos)img_gray.putpixel(pos, min(int(A+A*B/(255-B)), 255))axes[1].imshow(img_gray)
axes[1].set_title("sketch")
img_gray.save("sketch.png")plt.show()

二、代码讲解

1.这个代码的核心公式是颜色减淡公式:min(int(A+A*B/(255-B)),255),其中A是灰度,B是高斯模糊。通过这个公式我们把代码分成两个部分,第一个是求算A,B的阶段,第二个是利用条件绘制出素描图

1.灰度图和高斯模糊

我们在打开图片后将原图展示到用plt.subplots()创建的子画布中。创建两个子画布后,先将原图贴上去,再用set_title()设置展示图片的名字。我这里使用的是soldier1.jpg图片,大家可以加载自己喜欢的图片并将他和文件保存到一个文件夹里面。

接下来就是做素描图的过程了。根据公式,为了的到理想的高斯模糊,我们要先将彩色的画变成灰度图,然后给他进行反色再高斯模糊。

什么是灰度图?很好理解,就是由只有黑白灰的颜色构建出来的图片,他只有明度变化。因为matplotlib 有自己的颜色规则,所以单用convert()不一定会生成灰度图,还需要:plt.rcParams["image.cmap"] ="gray"  才能将其转化为灰度图模式。

那什么又是反色呢?简单地说就是黑变成了白,白变成了黑。浅色变成了相应的深色。其中他们的对应关系是:255-其中一种颜色=对应反色。接下来就是高斯模糊,其实就是模糊图片。GaussianBlur()这里面填入的是模糊程度,数字越大越模糊。

2.素描图生成

我们用getpixel()方法结合嵌套循环,分别取出灰度图,高斯模糊中的每一个像素RGB值,然后套入我们的颜色减淡公式,每个像素通过公式计算得到减淡后的像素RGB之后,使用putpixel()将该RGB值转化成相应色块并重新贴回img_gray图片里面,覆盖掉之前的内容。

其实这个公式一开始只有A+A*B/(255-B),可惜因为RGB不接受小数,所以要将结果整化,然后又怕结果超过255颜色最大值,就得用python自带的min()方法在该公式结果和255中取较小的一个。这样不管公式结果多大,返回值都可以控制在255以内。至于这个公式怎么来的嘛。。。要不就是实验,要不就是高度抽象的证明,这个不重要呗。

接下来就是imshow()加载图片,set_title()给素描图起名,save()保存,然后show()展示画布,大功告成!


总结

以上就是今天要讲的内容,本文介绍了如何将普通颜色图片转换成素描风格图片。其中涉及到了一些图片处理的知识,希望大家多多学习。

素描风格图片 彩色转素描python pillow库相关推荐

  1. Python pillow库学习笔记

    Python pillow库学习笔记 PIL( Python Imaging Library)是 Python 的第三方图像处理库,由于其功能丰富,API 简洁易用,因此深受好评. 自 2011 年以 ...

  2. 【003】Python实现图片转字符画(pillow 库的使用)

    在常见的RGB(A)模式图片中,利用每个像素点的R,G,B值按照公式转换成灰度值(0~255),然后在自己创建的字符表中找到灰度值对应的字符,添加到一个文本文件中,就实现了图片转字符画(黑白). 但是 ...

  3. python pillow库画图_python几种柱状图画法以及简单图片处理pillow库的学习

    之前说要插播一期画图心得,所以本期就介绍一下一些常见图的画法-为了get文末gif的合成和倒放的小彩蛋,还简单学了一个关于处理图片的库" [emmmmm,比如这样.......] 01 - ...

  4. python pillow库_python pillow模块用法

    pillow Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库.pillow可以说已经取代了PIL,将其封装成python的库(pip即可安装),且支持pytho ...

  5. python pillow库下载_054-python库Pillow

    前记 PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了.PIL功能非常强大,但API却非常简单易用. 由于PIL仅支持到Python 2.7,加上年 ...

  6. 图片怎么一键转换素描风格?方法来了

    AI Draw是一个能够将图片转换为素描风格动图的网站,当然,素材我们也可以通过gif动图的方式拿到AE里边去使用.操作灵活方便,可以调整线条.背景等参数,接下来看看AI Draw素描风格图片网站怎么 ...

  7. 简单实用的Python图像处理库Pillow

    Pillow图像处理 Pillow 库的安装 图象处理基本知识 图像的RGB 色彩模式 像素阵列 Image 模块 打开和新建 混合 透明度混合处理 遮罩混合处理 复制和缩放 复制图像 缩放像素 缩放 ...

  8. 【Python】用Pillow库为几百张二次元壁纸添加图标

    文章目录 1. 工作介绍 2. 程序分解 2.1 打开标志图像.调整标志大小 2.2 遍历所有文件并打开图像 2.3 调整图像的大小 2.4 添加标志.保存更改 2.5 完整程序 3. 类似程序的想法 ...

  9. python第三方库集锦

    环境管理管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. vi ...

最新文章

  1. Ubuntu上安装nginx步骤及问题记录
  2. excel取消隐藏_Excel技巧:批量删除隐藏数据及隐藏工作表
  3. WinSCP+PuTTY搭配使用 ,解决Windows连接Linux系统文件传输和终端登陆
  4. 迭代器以及迭代器的作用
  5. websocket心跳检测前后端架构
  6. 前端发送http的get请求 - 代码篇
  7. 在3.5下实现无配置WCF服务
  8. spark基础之checkpoint机制
  9. HDU1492 The number of divisors(约数) about Humble Numbers【约数】
  10. Linux 实用工具vi
  11. 自己碰到的一个“无法读取源文件或磁盘”问题处理
  12. 12000 颗卫星为地球织网!马斯克昨夜踏上改变世界的第6个征程
  13. 如何找到算法的时间复杂度
  14. mysql数据库数据恢复
  15. MySQL重置密码(适用Windows)
  16. java 完全匹配_全序列匹配(java)
  17. 普及什么是BGP服务器。BGP机房是什么以及高防BGP
  18. 研发人员绩效考核工作失败的几方面表现
  19. 文献笔记|心理学中信号检测论的一个实验数据转换应用参考
  20. 在BDP数据地图上快速实现柱状图!

热门文章

  1. Echarts-极坐标(参数详解)
  2. Word无法启动转换器RECOVR32.CNV的解决方法
  3. Greenshot — 支持多种插件的截图工具,一键上传网盘
  4. 微信小程序游戏跳一跳模拟
  5. CCNA培训的第四、第五天
  6. 强制删除WPS 遗留的qingnse64.dll
  7. 免费下载 | FANUC机器人全套资料!(编程、维护、保养...)
  8. element-ui的upload限制图片的格式,大小,以及宽高
  9. 用友u8连接不到文件服务器,用友u8服务器连接不到本地数据库
  10. 2021最新版-AWS亚马逊云RDS创建Aurora MySQL集群