Python实现将图片批量转化成素描图
文章目录
- 前言
- 程序
- 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实现将图片批量转化成素描图相关推荐
- Python将bmp格式的图片批量转成jpg
# *_* coding : UTF-8 *_* # 开发人员: csu·pan-_-|| # 开发时间: 2020/11/21 12:40 # 文件名称: bmp_to_jpg.py # 开发工具: ...
- Python将png格式批量转成jpg格式,并批量用圆抠图
Python将png格式批量转成jpg格式,并批量用圆抠图 png与jpg图片格式互转 批量用圆抠取图片 png与jpg图片格式互转 Python在做批量抠取图片时,遇到png格式的图片读取不出三通道 ...
- 将图片处理成圆形_如何把图片批量处理成指定/固定的文件大小/体积以内?
这里介绍的是类似这样的需求: 需要把一组图片批量处理成 宽度1000px,大小在150kb以内的jpeg格式. 01.打开工具链接 webp2jpg-online-在线图片格式转化器(无需上传)-we ...
- Python:对图片批量进行重命名
Python:对图片批量进行重命名 参考链接:https://www.cnblogs.com/znh8/p/11809737.html 将视频转化为图片,以帧的形式进行命名, 如 0.jpg.1.jp ...
- python 根据word生成ppt_未明学院:利用Python将Wordamp;PPT批量转成PDF
Python中的许多库,像一个个具有不同功能的"工具",能帮助我们解决工作中的不同问题,提高工作效率! 本期将继续为大家放松python中的实用技能,本期的主题是:利用Python ...
- excel中文本格式如何批量转化成数字
从excel表格中复制粘贴到另一个表格中导致粘贴后数据为文本格式,如何进行批量转化成数据格式呢? 首先选择你要转化格式的列 在菜单栏中选择分列 在弹出的对话框中,选择分割符合,点击下一步 继续点击下一 ...
- 如何将图片批量合并成PDF?
图片一般都只能一张一张的查看,如果遇到图片的数量较多,那么查看可保存起来就不是很方便,所以,为了方便起见,我们可以将图片批量合并成PDF文档,这样单个的PDF文档查看和保存及传阅都方便很多,下面就给大 ...
- 【Python】python实现jpg图片文字转成pdf格式
python实现jpg图片文字转成pdf格式 [代码][Python]代码 #!/usr/bin/env pythonimport os import sys from reportlab.lib.p ...
- 利用Python将图片批量改成任意格式
将图片格式改成任意格式,如将bmp改成jpg格式 代码如下: import glob import os import threading from PIL import Imagedef creat ...
最新文章
- 嵌入式linux 升级,嵌入式Linux的OTA更新,基本原理和实现
- 《unix设备驱动》内存分配
- python子进程 内存,python中的子进程内存使用情况
- 【sprinb-boot】排除/不加载某些Bean
- 初识 Angularjs1.x ,了解5个W和1个H
- Flask服务部署与简单内网穿透
- java中如何对汉字进行排序?
- matlab如何添加度,matlab里的模糊工具箱绘制隶属度函数曲线导入到word的方法
- JDBC中开启事务的批量插入操作
- java 存储过程返回结果集_通过SQL“select * from”从java存储过程返回结果集
- java编程练习(开源):十种经典游戏
- JSP内置对象-out对象
- 使用dockerfile搭建java运行环境
- 【vue手写图片预览组件】在vue2.0项目中手写图片预览组件,旋转、放大、滚动、下载等功能
- 数字孪生是什么?以山海鲸智慧园区三维可视化系统为例说明
- 关于Mac系统接完投影仪拔下来以后有黑框的问题解决办法
- 计算机专业 大学物理课程简介,大学物理A课程简介.doc
- 蓝桥杯练习系统-基础练习
- Windows 与 Linux之间进行文件传输,文件传输工具Cuteftp的使用方法。
- 怎么才能做好百度seo?
热门文章
- 今天nba预测分析_焰神体育【NBA】赛事推荐预测分析:1月15日《开拓者》vs《步行者》...
- typescript官方中文文档,typescript是什么意思
- 《Unix/Linux日志分析与流量监控》书稿完成
- 北石化奥美队参加2006年全国机器人足球大赛侧记
- 奇迹单机版服务器修改器,奇迹单机版送无限特权-奇迹单机版钻石修改器手游预约_第一手游网...
- 医学影像MRI,CT和X-ray概述
- 动态获取自定义控件坐标中遇到的问题
- 一看就懂的网络传输介质介绍
- c语言课程设计电影选座,C语言课程设计电影院座位分配(1).doc
- openwrt 开启ap的方法