pillow与numpy实现图片素描化
from PIL import Image
import numpy as np #封装一个图像处理类
class TestNumpy(object):
def photo2paint(self,img_url):
# 读取图片
my_photo = np.asarray(Image.open(img_url).convert("L")).astype("float")
# print(my_photo.shape)
#设置灰度阈值(范围0~100)
depth = 40
# 将灰度系数映射到numpy
grad = np.gradient(my_photo)
#获取坐标
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
#设置x轴和y轴
dx = np.cos(vec_el)* np.cos(vec_az)
dy = np.cos(vec_el)* np.sin(vec_az)
#设置z轴
dz = np.sin(vec_el)
#设置byte值
b = 255*(dx*uni_x+dy*uni_y+dz*uni_z)
#光源归一化
b = b.clip(0,255)
#声明图像类图像
im = Image.fromarray(b.astype("uint8"))
#保存图像
im.save("./test_new.jpg")
if __name__ == "__main__":
testnumpy = TestNumpy()
testnumpy.photo2paint('./test_numpy.jpg')


pillow与numpy实现图片素描化的更多相关文章
- python PIL 图片素描化
from PIL import Image import numpy as np a = np.asarray(Image.open("D://7.jpg").convert('L ...
- Atitit 图像处理 灰度图片 灰度化的原理与实现
Atitit 图像处理 灰度图片 灰度化的原理与实现 24位彩色图与8位灰度图 首先要先介绍一下24位彩色图像,在一个24位彩色图像中,每个像素由三个字节表示,通常表示为RGB.通常,许多24位彩色图 ...
- 用 opencv和numpy进行图片和字符串互转,并保存至 json
用 opencv和numpy进行图片和字符串互转,并保存至 json 转至 https://zhuanlan.zhihu.com/p/27349847 受 用 base64 进行图片和字符串互转,并保 ...
- 图片碎片化mask动画
图片碎片化mask动画 效果 源码 https://github.com/YouXianMing/Animations // // TransformFadeViewController.m // A ...
- three.js 将图片马赛克化
这篇郭先生来说说BufferGeometry,类型化数组和粒子系统的使用,并且让图片有马赛克效果(同理可以让不清晰的图片清晰化),如图所示.在线案例点击博客原文 1. 解析图片 解析图片和上一篇一样 ...
- 随便谈谈用canvas来实现文字图片粒子化
声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 看了岑安大大的教程http://www.cnblogs.com/hongru/archive/2012/03/28/2420415.htm ...
- numpy表示图片详解
我自己的一个体会,在学习机器学习和深度学习的过程里,包括阅读模型源码的过程里,一个比较大的阻碍是对numpy掌握的不熟,有的时候对矩阵的维度,矩阵中每个元素值的含义晕乎乎的. 本文就以一个2 x 2 ...
- 巧用 CSS 把图片马赛克化
一.image-rendering 介绍 CSS 中有一个有趣的特性叫 image-rendering,它可以通过算法来更好地显示被缩放的图片. 假设我们有一张尺寸较小的二维码截图(下方左),将其放大 ...
- Python3.4的Pillow库实现验证码图片
转自 http://blog.csdn.net/bin381/article/details/41969493 from PIL import Image,ImageDraw, ImageFont, ...
随机推荐
- Android进阶——深入浅出Handler(一)
Android进阶--深入浅出Handler(一) 在学习Handler之前,首先要学习一些基本概念,这将对之后的学习有所帮助. 主线程:Main Thread,又叫UI线程(UI Thread).A ...
- PM2 指令简介
pm2 是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的,下面我们来看pm2常用的命令用法介绍吧 ...
- Python 函数(可变参数)
在python函数中,可以定义可变参数,顾名思义,可变参数就是,传入的参数是可变的例如,给定一组数字a,b,c... 请计算a2 + b2 + c2 + …… 要定义出这个函数,我们必须确定输入的参 ...
- python 迭代器模式
迭代器模式 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式.这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示. 迭代器模式属于行 ...
- [JS] ECMAScript 6 - Prototype : compare with c#
开胃菜 prototype 对象 JavaScript 语言的继承则是通过“原型对象”(prototype). function Cat(name, color) { // <----构造函数 ...
- 8 -- 深入使用Spring -- 5... Spring 3.1 新增的缓存机制
8.5 Spring 3.1 新增的缓存机制 Spring 3.1 新增了一种全新的缓存机制,这种缓存机制与Spring容器无缝地整合在一起,可以对容器中的任意Bean或Bean的方法增加缓存.Spr ...
- php的opcache缓存扩展
opcache (全程 zend opcache): 从php5.5开始,默认提供的php脚本缓存扩展,编译php5.5时加上参数--enable-opcache就可以编译opcache了,只是要启用 ...
- 自定义 vim
官网 插件列表 Vundle 插件管理器 windows cmder 安装 Vundle git clone https://github.com/VundleVim/Vundle.vim.git ~ ...
- Tarjan 强连通分量 及 双联通分量(求割点,割边)
Tarjan 强连通分量 及 双联通分量(求割点,割边) 众所周知,Tarjan的三大算法分别为 (1) 有向图的强联通分量 (2) 无向图的双联通分量(求割点,桥) ...
- BZOJ 1003 - 物流运输 - [最短路+dp]
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1003 Time Limit: 10 Sec Memory Limit: 162 MB D ...