文章目录

  • 前言
  • 程序
    • Method 1
    • Method 2
    • 完整代码
  • 结果

前言

正常图片转化成素描图片无非对图片像素的处理,矩阵变化而已。目前很多拍照修图App都有这一功能,核心代码不超30行。如下利用 Python 实现读取一张图片并将其转化成素描图片。至于批处理也简单,循环读取文件夹里的图片处理即可。具体代码可以去我的 GitHub 下载。

程序

Method 1

def plot_sketch(origin_picture, out_picture) :a = np.asarray(Image.open(origin_picture).convert('L')).astype('float')depth = 10.  # (0-100)grad = np.gradient(a)  # 取图像灰度的梯度值grad_x, grad_y = grad  # 分别取横纵图像梯度值grad_x = grad_x * depth / 100.grad_y = grad_y * depth / 100.A = np.sqrt(grad_x ** 2 + grad_y ** 2 + 1.0)uni_x = grad_x / Auni_y = grad_y / Auni_z = 1. / Avec_el = np.pi / 2.2  # 光源的俯视角度,弧度值vec_az = np.pi / 4.  # 光源的方位角度,弧度值dx = np.cos(vec_el) * np.cos(vec_az)  # 光源对x 轴的影响dy = np.cos(vec_el) * np.sin(vec_az)  # 光源对y 轴的影响dz = np.sin(vec_el)  # 光源对z 轴的影响b = 255 * (dx * uni_x + dy * uni_y + dz * uni_z)  # 光源归一化b = b.clip(0, 255)im = Image.fromarray(b.astype('uint8'))  # 重构图像im.save(out_picture)print("转换成功,请查看 : ", out_picture)

Method 2

def plot_sketch2(origin_picture, out_picture, alpha=1.0):img = Image.open(origin_picture)blur = 20img1 = img.convert('L')  # 图片转换成灰色img2 = img1.copy()img2 = ImageOps.invert(img2)for i in range(blur):  # 模糊度img2 = img2.filter(ImageFilter.BLUR)width, height = img1.sizefor x in range(width):for y in range(height):a = img1.getpixel((x, y))b = img2.getpixel((x, y))img1.putpixel((x, y), min(int(a*255/(256-b*alpha)), 255))img1.save(out_picture)

完整代码

from PIL import Image, ImageFilter, ImageOps
import numpy as np
import osdef plot_sketch(origin_picture, out_picture) :a = np.asarray(Image.open(origin_picture).convert('L')).astype('float')depth = 10.  # (0-100)grad = np.gradient(a)  # 取图像灰度的梯度值grad_x, grad_y = grad  # 分别取横纵图像梯度值grad_x = grad_x * depth / 100.grad_y = grad_y * depth / 100.A = np.sqrt(grad_x ** 2 + grad_y ** 2 + 1.0)uni_x = grad_x / Auni_y = grad_y / Auni_z = 1. / Avec_el = np.pi / 2.2  # 光源的俯视角度,弧度值vec_az = np.pi / 4.  # 光源的方位角度,弧度值dx = np.cos(vec_el) * np.cos(vec_az)  # 光源对x 轴的影响dy = np.cos(vec_el) * np.sin(vec_az)  # 光源对y 轴的影响dz = np.sin(vec_el)  # 光源对z 轴的影响b = 255 * (dx * uni_x + dy * uni_y + dz * uni_z)  # 光源归一化b = b.clip(0, 255)im = Image.fromarray(b.astype('uint8'))  # 重构图像im.save(out_picture)print("转换成功,请查看 : ", out_picture)def plot_sketch2(origin_picture, out_picture, alpha=1.0):img = Image.open(origin_picture)blur = 20img1 = img.convert('L')  # 图片转换成灰色img2 = img1.copy()img2 = ImageOps.invert(img2)for i in range(blur):  # 模糊度img2 = img2.filter(ImageFilter.BLUR)width, height = img1.sizefor x in range(width):for y in range(height):a = img1.getpixel((x, y))b = img2.getpixel((x, y))img1.putpixel((x, y), min(int(a*255/(256-b*alpha)), 255))img1.save(out_picture)if __name__ == '__main__':origin_picture = "pictures/5.jpg"out_picture = "sketchs/sketch.jpg"plot_sketch(origin_picture, out_picture)origin_path = "./pictures"out_path = "./sketchs"dirs = os.listdir(origin_path)for file in dirs:origin_picture = origin_path + "/" + fileout_picture = out_path + "/" + "sketch_of_" + fileplot_sketch2(origin_picture, out_picture)

结果








Python实现将图片批量转化成素描图相关推荐

  1. Python将bmp格式的图片批量转成jpg

    # *_* coding : UTF-8 *_* # 开发人员: csu·pan-_-|| # 开发时间: 2020/11/21 12:40 # 文件名称: bmp_to_jpg.py # 开发工具: ...

  2. Python将png格式批量转成jpg格式,并批量用圆抠图

    Python将png格式批量转成jpg格式,并批量用圆抠图 png与jpg图片格式互转 批量用圆抠取图片 png与jpg图片格式互转 Python在做批量抠取图片时,遇到png格式的图片读取不出三通道 ...

  3. 将图片处理成圆形_如何把图片批量处理成指定/固定的文件大小/体积以内?

    这里介绍的是类似这样的需求: 需要把一组图片批量处理成 宽度1000px,大小在150kb以内的jpeg格式. 01.打开工具链接 webp2jpg-online-在线图片格式转化器(无需上传)-we ...

  4. Python:对图片批量进行重命名

    Python:对图片批量进行重命名 参考链接:https://www.cnblogs.com/znh8/p/11809737.html 将视频转化为图片,以帧的形式进行命名, 如 0.jpg.1.jp ...

  5. python 根据word生成ppt_未明学院:利用Python将Wordamp;PPT批量转成PDF

    Python中的许多库,像一个个具有不同功能的"工具",能帮助我们解决工作中的不同问题,提高工作效率! 本期将继续为大家放松python中的实用技能,本期的主题是:利用Python ...

  6. excel中文本格式如何批量转化成数字

    从excel表格中复制粘贴到另一个表格中导致粘贴后数据为文本格式,如何进行批量转化成数据格式呢? 首先选择你要转化格式的列 在菜单栏中选择分列 在弹出的对话框中,选择分割符合,点击下一步 继续点击下一 ...

  7. 如何将图片批量合并成PDF?

    图片一般都只能一张一张的查看,如果遇到图片的数量较多,那么查看可保存起来就不是很方便,所以,为了方便起见,我们可以将图片批量合并成PDF文档,这样单个的PDF文档查看和保存及传阅都方便很多,下面就给大 ...

  8. 【Python】python实现jpg图片文字转成pdf格式

    python实现jpg图片文字转成pdf格式 [代码][Python]代码 #!/usr/bin/env pythonimport os import sys from reportlab.lib.p ...

  9. 利用Python将图片批量改成任意格式

    将图片格式改成任意格式,如将bmp改成jpg格式 代码如下: import glob import os import threading from PIL import Imagedef creat ...

最新文章

  1. 嵌入式linux 升级,嵌入式Linux的OTA更新,基本原理和实现
  2. 《unix设备驱动》内存分配
  3. python子进程 内存,python中的子进程内存使用情况
  4. 【sprinb-boot】排除/不加载某些Bean
  5. 初识 Angularjs1.x ,了解5个W和1个H
  6. Flask服务部署与简单内网穿透
  7. java中如何对汉字进行排序?
  8. matlab如何添加度,matlab里的模糊工具箱绘制隶属度函数曲线导入到word的方法
  9. JDBC中开启事务的批量插入操作
  10. java 存储过程返回结果集_通过SQL“select * from”从java存储过程返回结果集
  11. java编程练习(开源):十种经典游戏
  12. JSP内置对象-out对象
  13. 使用dockerfile搭建java运行环境
  14. 【vue手写图片预览组件】在vue2.0项目中手写图片预览组件,旋转、放大、滚动、下载等功能
  15. 数字孪生是什么?以山海鲸智慧园区三维可视化系统为例说明
  16. 关于Mac系统接完投影仪拔下来以后有黑框的问题解决办法
  17. 计算机专业 大学物理课程简介,大学物理A课程简介.doc
  18. 蓝桥杯练习系统-基础练习
  19. Windows 与 Linux之间进行文件传输,文件传输工具Cuteftp的使用方法。
  20. 怎么才能做好百度seo?

热门文章

  1. 今天nba预测分析_焰神体育【NBA】赛事推荐预测分析:1月15日《开拓者》vs《步行者》...
  2. typescript官方中文文档,typescript是什么意思
  3. 《Unix/Linux日志分析与流量监控》书稿完成
  4. 北石化奥美队参加2006年全国机器人足球大赛侧记
  5. 奇迹单机版服务器修改器,奇迹单机版送无限特权-奇迹单机版钻石修改器手游预约_第一手游网...
  6. 医学影像MRI,CT和X-ray概述
  7. 动态获取自定义控件坐标中遇到的问题
  8. 一看就懂的网络传输介质介绍
  9. c语言课程设计电影选座,C语言课程设计电影院座位分配(1).doc
  10. openwrt 开启ap的方法