python实现图片素描效果
作者:chuyaoxin 发布时间:2022-06-10 21:00:40
标签:python,图片,素描
代码如下:
from PIL import Image #图像处理模块
import numpy as np
a = np.asarray(Image.open("这里是原图片的路径").convert('L')).astype('float')
#将图像以灰度图的方式打开并将数据转为float存入np中
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.)
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1./A
#建立一个位于图像斜上方的虚拟光源
vec_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) #clip函数将区间外的数字剪除到区间边缘
im = Image.fromarray(b.astype('uint8')) #重构图像
im.save("这里是输出图片的路径")
检验一下效果:
from PIL import Image #图像处理模块
import numpy as np
# 将图像以灰度图的方式打开并将数据转为float存入np中
a = np.asarray(Image.open("D://Python//图片转素描//4.jpg").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.)
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1./A
# 建立一个位于图像斜上方的虚拟光源
vec_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) # clip函数将区间外的数字剪除到区间边缘
im = Image.fromarray(b.astype('uint8')) # 重构图像
im.save("D://Python//图片转素描//4_2.jpg")
原图:
转换后
但是不适合那些依赖光影变换效果的图片,比如我最爱的百里守约就很糟糕
来源:https://www.cnblogs.com/cyx-b/p/12829816.html


猜你喜欢
- 今天跟大家分享下selenium中根据父子、兄弟、相邻节点定位的方法,很多人在实际应用中会遇到想定位的节点无法直接定位,需要通过附近节点来相
- 本章节将一些Python3基础语法整理成手册,方便各位在日常使用和学习是查阅,包含了编码、标识符、保留字、注释、缩进、字符串等常用内容。编码
- 1. python中创建新的csv文件(1). 使用csv.writer()创建:代码如下:import csvheaders = [
- Firefox 3.5已经发布了几个月了,且已经历5次小幅更新。而基于Gecko 1.9.2的Firefox 3.6也已经开发数月,现在已经
- 写在最前最近在使用vue的时候,遇到一个需求,实现左右div可通过中间部分拖拽调整宽度,类似于这样这是我最终的实现效果还是老话,因为我不是专
- #!/usr/local/python import os import time import string source=['/
- 本文实例为大家分享了bootstrapTable+ajax加载数据,和refresh更新数据两部分,供大家参考,具体内容如下1.html&l
- 配置环境: 1、数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版 2、安装路径:C:ORACLE 实现方法: 1.
- Python命令行假设你已经安装好了Python, 那么在Linux命令行输入:$python将直接进入python。然后在命令行提示符&g
- 目录前言简介实现实现效果总结前言坦克大战是一款策略类的平面射击游戏,于 1985 年由 Namco 游戏公司发布,尽管时至今日已经有了很多衍
- 创建项目Location:新项目文件夹GOROOT:go 安装根目录Proxy:https://goproxy.io,direct重要:ht
- JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript
- 当我们使用访问一个没有声明的变量时,JS会报错;而当我们给一个没有声明的变量赋值时,JS不会报错,相反它会认为我们是要隐式申明一个全局变量。
- 本文实例为大家分享了python实现烟花小程序的具体代码,供大家参考,具体内容如下'''FIREWORKS SIMU
- 复制代码CREATE FUNCTION fGetStrBySplit ( @Source VARCHAR(max), @Index INT,
- Toast简介Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的
- 背景:不久前,设计实现了京东api的功能,发现如果换了其它快递再重新设计,岂不是会浪费太多的时间,所以选个第三方提供的快递API是最为合理的
- 1.查看当前电脑python版本python -V // 显示2.7.x2.用brew升级pythonbrew update p
- 前言在使用 Go 语言开发过程中,我们不免会定义结构体,但是我们定义的结构体都是有字段的,基本不会定义不包含字段的 空结构体。你可能会反过来
- 其实网上有很多关于python2.6.6 升级到python2.7的文章,但是我对比这些类似的文章升级之后,发现其中有错误的地方,于是决定还