用python画素描画方式有多种,这里给大家分享常见的且操作简单的两种实现方式,一种用pillow库,一种用opencv库,这两个库的具体使用可百度,网上很多教程,这里不再赘述。

一、pillow实现方法

1. 先在cmd上安装pillow库:

pip install pillow

2. 首先用convert('L')方法将彩色RGB图转换为灰度图

img = Image.open(pth)

out_img = img.convert('L') # 图片转换为灰度模式

width, height = img.size

pixel = img.load()

3. 设定一个阈值,当(x,y)与(x+1,y+1)点灰度值差值大于设定的阈值,即可判定(x,y)的像素点为轮廓。可通过设置阈值的大小,来改变素描的呈现效果。

threshold = 16 #设定阈值

for w in range(width):

for h in range(height):

if w == width - 1 or h == height - 1:

continue

xy = pixel[w, h]

x1y1 = pixel[w + 1, h + 1]

diff = abs(xy - x1y1)

if diff >= threshold:

pixel[w, h] = 0 #灰度越大越白,代表是轮廓

else:

pixel[w, h] = 255 #灰度越大越白,代表是轮廓

4. 保存图片

img.save(out_name)

5. 源代码

from PIL import Image

import easygui as eg

import os

def analyze(img, threshold):

if threshold < 0:

threshold = 0

if threshold > 100:

threshold = 100

width, height = img.size

img = img.convert('L') # 转为灰度图

pixel = img.load() # 获取灰度值

for w in range(width):

for h in range(height):

if w == width - 1 or h == height - 1:

continue

xy = pix[w, h]

x1y1 = pix[w + 1, h + 1]

diff = abs(xy - x1y1)

if diff >= threshold:

pixel[w, h] = 0 #灰度越大越白,代表是轮廓

else:

pixel[w, h] = 255 #灰度越大越白,代表是轮廓

return img

def main():

threshold = 16

pth = eg.fileopenbox(title='请打开要转换的图片') # 打开图片

dir = os.path.dirname(pth) # 返回图片所在的路径

ori_name = os.path.basename(pth) # 返回图片名称及扩展名

name = os.path.splitext(ori_name)[0] # 返回图片名称

geshi = os.path.splitext(ori_name)[1] # 返回图片的扩展名

out_name = os.path.join(dir, name +'(素描版)' + geshi) # 输出的名字及路径

img = Image.open(pth)

img = analyze(img,threshold)

img.save(out_name)

if __name__=='__main__':

main()

二、opencv实现方法

1. 先在cmd上安装opencv-python库:

pip install opencv-python

2. 打开图片

img = cv2.imread(pth)

3. 将图片转换成为灰度图

img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

4. 使用高斯滤波函数对灰度图进行模糊化操作,参数ksize表示高斯核的大小,sigmaX和sigmaY分别表示高斯核在 X 和 Y 方向上的标准差。可以通过调整ksize来呈现不同效果。

img_blur = cv2.GaussianBlur(img_gray, ksize=(81, 81),sigmaX=0, sigmaY=0)

5. 使用cv2.divide()方法对原图和模糊图像进行融合,找到两幅图之间有明显差异的部分,即为图片轮廓。

img_out=cv2.divide(img_gray, img_blur, scale=255)

6. 保存图片

cv2.imwrite(out_name, img_out)

7. 源代码

import easygui as eg

import os

import cv2

def main():

pth = eg.fileopenbox(title='请打开要转换的图片') # 打开图片

dir = os.path.dirname(pth) # 返回图片所在的路径

ori_name = os.path.basename(pth) # 返回图片名称及扩展名

name = os.path.splitext(ori_name)[0] # 返回图片名称

geshi = os.path.splitext(ori_name)[1] # 返回图片的扩展名

out_name = os.path.join(dir, name +'(sumiao)' + geshi) # 输出的名字及路径

img = cv2.imread(pth)

img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

img_blur = cv2.GaussianBlur(img_gray, ksize=(11, 11),sigmaX=0, sigmaY=0)

img_out=cv2.divide(img_gray, img_blur, scale=255)

cv2.imwrite(out_name, img_out)

if __name__=='__main__':

main()

两种方法的素描图的呈现效果不同,opencv相比显示的柔和写,图形显示更加柔和细腻。

python画素描画_Python素描画的两种程序解析相关推荐

  1. python画素描画_python如何将图片转换素描画

    代码如下 # -*- coding:utf-8 -*- import cv2 import numpy as np from tkinter import filedialog, Tk from os ...

  2. python安装gdal包_python安装gdal的两种方法

    1.不用手动下载文件,直接执行以下命令即可 conda install gdal 2.首先,下载gdal的whl文件  链接, 官网下载比较慢,GDAL-2.2.4-cp27-cp27m-win_am ...

  3. python字符串成熟编码_python字符串转公式两种方法获取网页编码python版

    在web开发的时候我们经常会遇到网页抓取和分析,各种语言都可以完成这个功能.我喜欢用python实现,因为python提供了很多成熟的模块,可以很方便的实现网页抓取. 但是在抓取过程中会遇到编码的问题 ...

  4. python 并发执行命令_python: 多线程实现的两种方式及让多条命令并发执行

    一 概念介绍 Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法:另一种是创建一个threading. ...

  5. python opencv 裁剪图片_Python图片裁剪的两种方式——Pillow和OpenCV

    在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一种利用了OpenCV.两种方式都需要简单的几行代码,这可能也就是现在Python那么流行的原因吧. OpenCV ...

  6. python素描画_python如何将图片转换素描画

    代码如下 # -*- coding:utf-8 -*- import cv2 import numpy as np from tkinter import filedialog, Tk from os ...

  7. python定时器的使用方法_Python timer定时器两种常用方法解析

    这篇文章主要介绍了Python timer定时器两种常用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 方法一,使用线程中现成的: 这种一般 ...

  8. python timer使用-Python timer定时器两种常用方法解析

    这篇文章主要介绍了Python timer定时器两种常用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 方法一,使用线程中现成的: 这种一般 ...

  9. 运用Python爬取二手房价格与信息的两种常用方法

    最近房地产市场进一步收紧,多地地方政府出台各种收紧政策,以保证房地产健康发展,因此云朵君就想到运用Python网络爬虫,抓取部分房产信息,了解下最近房地产的情况. 接下来以房天下二手房信息,以获取某个 ...

最新文章

  1. JS监听手机物理返回键,返回到指定页面
  2. spring Transaction Propagation 事务传播
  3. 杭电oj2043密码
  4. hadoop常见面试题
  5. 【51单片机快速入门指南】6.3:DS18B20 单总线数字温度计的多路读取
  6. 图Graph--寻找二度好友(BFS应用)
  7. PHP在线加密系统-陌屿云PLUS开源版V8.01
  8. Spring Cloud 服务注册与发现 [ eureka ]
  9. 小米11和vivox60买哪个?
  10. JS 匿名函数 自执行
  11. 算法设计 - LCS 最长公共子序列最长公共子串 LIS 最长递增子序列
  12. Codeforces 385 C Bear and Prime Numbers
  13. python工资高还是java-深圳python工资高还是java
  14. 分布式存储系统设计的关键问题
  15. matlab求最大公约数和最小公倍数
  16. dotween路径移动_使用DOTween Pro插件设置物体移动的位置、移动的方式、以及动画结束时执行方法...
  17. CentOS/RHEL 7中的firewall控制
  18. 2013 域名注册商排行
  19. 信息技术未来发展方向
  20. MessageBox()用法简介

热门文章

  1. 整数有约 | 光彻科技:AI智能体测系统,体育老师的减负神器,来了!
  2. 魔塔之拯救白娘子~我的第一个VB6+DX8做的小游戏源码~18开始游戏-物体碰撞检测
  3. 论文研读 —— 1. Modeling Motion Blur in Computer Generated Images
  4. 集合篇10.华为机试(涮题记录2)
  5. 为什么计算机桌面没在了,为什么没有运行良好的计算机桌面日历软件?
  6. php Session是怎么实现的?存储在哪里?
  7. MFC 右下角弹窗显示关闭实例
  8. 数据库的查询优化方法
  9. 小资之豆浆篇 (IS2120@BG57IV3)
  10. linux 增加一列,在Unix shell中添加一列数字