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实现图片素描化的更多相关文章

  1. python PIL 图片素描化

    from PIL import Image import numpy as np a = np.asarray(Image.open("D://7.jpg").convert('L ...

  2. Atitit 图像处理 灰度图片 灰度化的原理与实现

    Atitit 图像处理 灰度图片 灰度化的原理与实现 24位彩色图与8位灰度图 首先要先介绍一下24位彩色图像,在一个24位彩色图像中,每个像素由三个字节表示,通常表示为RGB.通常,许多24位彩色图 ...

  3. 用 opencv和numpy进行图片和字符串互转,并保存至 json

    用 opencv和numpy进行图片和字符串互转,并保存至 json 转至 https://zhuanlan.zhihu.com/p/27349847 受 用 base64 进行图片和字符串互转,并保 ...

  4. 图片碎片化mask动画

    图片碎片化mask动画 效果 源码 https://github.com/YouXianMing/Animations // // TransformFadeViewController.m // A ...

  5. three.js 将图片马赛克化

    这篇郭先生来说说BufferGeometry,类型化数组和粒子系统的使用,并且让图片有马赛克效果(同理可以让不清晰的图片清晰化),如图所示.在线案例点击博客原文 1. 解析图片 解析图片和上一篇一样 ...

  6. 随便谈谈用canvas来实现文字图片粒子化

    声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 看了岑安大大的教程http://www.cnblogs.com/hongru/archive/2012/03/28/2420415.htm ...

  7. numpy表示图片详解

    我自己的一个体会,在学习机器学习和深度学习的过程里,包括阅读模型源码的过程里,一个比较大的阻碍是对numpy掌握的不熟,有的时候对矩阵的维度,矩阵中每个元素值的含义晕乎乎的. 本文就以一个2 x 2 ...

  8. 巧用 CSS 把图片马赛克化

    一.image-rendering 介绍 CSS 中有一个有趣的特性叫 image-rendering,它可以通过算法来更好地显示被缩放的图片. 假设我们有一张尺寸较小的二维码截图(下方左),将其放大 ...

  9. Python3.4的Pillow库实现验证码图片

    转自 http://blog.csdn.net/bin381/article/details/41969493 from PIL import Image,ImageDraw, ImageFont, ...

随机推荐

  1. SILK 预测模块分析

    SILK是一种新结构的基于噪声整形量化算法的编解码框架.不同于类CELP的AMR,EVRC,G729,Speex等标准. 类CELP的结构都是以码本激励为量化框架的编码器.但是这里并不讨论NSQ结构和 ...

  2. Java知多少(83)面板基础:JPanel和JScrollPane

    面板有两种,一种是普通面板(JPanel),另一种是滚动面板(JScrollPane). JPanel 面板是一种通用容器,JPanel的作用是实现界面的层次结构,在它上面放入一些组件,也可以在上面绘 ...

  3. Ant与Proguard集中

    示例: <taskdef resource="proguard/ant/task.properties"         classpath="/usr/local ...

  4. JAVA WEB -- request

    request request.getContextPath()  返回站点的根目录 request.getRealpath("/")得到的是实际的物理路径,也就是你的项目所在服务 ...

  5. java.security.ProviderException: java.security.KeyException

    本机部署没问题,部署到linux服务器报错: javax.net.ssl.SSLException: java.security.ProviderException: java.security.Ke ...

  6. Hook lua库函数时遇到的问题

    最近在为distri.lua实现一个lua调试系统,有一个简单的需求,lua导入一个文件的时候,将这个文件的文件名记录下来, 以方便调试器在设置断点的时候判断是否一个合法的文件. lua导入文件是通过 ...

  7. Using Information Fragments to Answer the Questions Developers Ask

    content : 1.采访了11个开发者,获得78个常问的问题:2.对78个问题进行分类,分为8类:These questions span eight domains of information ...

  8. 关于ie6出现的问题的原因归结

    关于ie6出现的问题主要可以归结为以下几种情况把. 当然还存在各种原因,bug的情况也还有各种各样,我只是小结一下我自己经常遇到,比较有代表性的问题.会持续的更新. 1.浏览器本身存在的缺陷 比如: ...

  9. mui---子页面主动调用父页面的方法

    我们在做APP的时候,很多时候会有这样的功能需求,例如:登录,充值,如果登录成功,或充值成功后,需要更改当前页面以及父页面的状态信息,就会用到在子页面调用父页面的方法来实现:在子页面刷新父页面的功能. ...

  10. D - Game Prediction

    Suppose there are M people, including you, playing a special card game. At the beginning, each playe ...