# 导入绘图库
from PIL import Image
#导入科学计算库
import numpy as np #封装一个图像处理工具类
class TestNumpy(object): def photo2paint(self,img_url):
#读取图片,asarray()转矩阵 convert('L')转变成像素化 astype()转元素类型
my_photo = np.asarray(Image.open(img_url).convert('L')).astype('float')
print(my_photo)
print(my_photo.dtype)
print(my_photo.shape)
print(my_photo.size)
print('矩阵是 {} 维度'.format(my_photo.ndim))
print('元素 {} 字节'.format(my_photo.itemsize)) #设置灰度阈值 范围是(0-100)
depth = 10 #将灰度系数映射到numpy
grad = np.gradient(my_photo) #获取坐标
grad_x,grad_y = grad #分别处理,淡化灰度
grad_x = grad_x * depth / 300
grad_y = grad_y * depth / 300 #设置阿尔法值
#设置坐标范围
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__":
tn = TestNumpy()
tn.photo2paint('./test_numpy.jpg')

python科学计算库numpy和绘图库PIL的结合,素描图片(原创)的更多相关文章

  1. Python科学计算库Numpy

    Python科学计算库Numpy NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 1.简 ...

  2. [Python学习] python 科学计算库NumPy—矩阵运算

    NumPy库的核心是矩阵及其运算. 使用array()函数可以将python的array_like数据转变成数组形式,使用matrix()函数转变成矩阵形式. 基于习惯,在实际使用中较常用array而 ...

  3. Python科学计算库-Numpy

    NumPy 是 Python 语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,也是学习 python 必学的一个库. 1. 读取文件 numpy.gen ...

  4. Python 科学计算库numpy

    Numpy基础数据结构 NumPy数组是一个多维数组对象,称为ndarray.其由两部分组成: 实际的数据 描述这些数据的元数 # 多维数组ndarray import numpy as np ar ...

  5. [Python学习] python 科学计算库NumPy—tile函数

    在学习knn分类算法的过程中用到了tile函数,有诸多的不理解,记录下来此函数的用法.   函数原型:numpy.tile(A,reps) #简单理解是此函数将A进行重复输出 其中A和reps都是ar ...

  6. Python科学计算库

    Python科学计算库 一.numpy库和matplotlib库的学习 (1)numpy库介绍:科学计算包,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换.随机数生成 ...

  7. 科学计算库Numpy基础&提升(理解+重要函数讲解)

    Intro 对于同样的数值计算任务,使用numpy比直接编写python代码实现 优点: 代码更简洁: numpy直接以数组.矩阵为粒度计算并且支持大量的数学函数,而python需要用for循环从底层 ...

  8. python科学计算库的numpy基础知识,完美抽象多维数组(原创)

    #导入科学计算库 #起别名避免重名 import numpy as np #小技巧:从外往内看==从左往右看 从内往外看==从右往左看 #打印版本号 print(np.version.version) ...

  9. numpy科学计算库的基础用法,完美抽象多维数组(原创)

    #起别名避免重名 import numpy as np #小技巧:print从外往内看==shape从左往右看 if __name__ == "__main__": print(' ...

随机推荐

  1. Nginx/LVS/HAProxy 负载均衡软件的优缺点详解

    Nginx/LVS/HAProxy 负载均衡软件的优缺点详解   Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验 ...

  2. Python--开发简单爬虫

    简单爬虫架构 动态运行流程 URL管理器的作用 URL管理器的3种实现方式 网页下载器的作用 Python网页下载器的种类 urllib2下载网页的3种方法 网页解析器的作用 Python的几种网页解 ...

  3. JavaScript夯实基础系列(四):原型

      在JavaScript中有六种数据类型:number.string.boolean.null.undefined以及对象,ES6加入了一种新的数据类型symbol.其中对象称为引用类型,其他数据类 ...

  4. 生产线平衡问题的+Leapms线性规划方法

    知识点 第一类生产线平衡问题,第二类生产线平衡问题 整数线性规划模型,+Leapms模型,直接求解,CPLEX求解 装配生产线平衡问题 (The Assembly Line Balancing Pro ...

  5. 【我们一起写框架】MVVM的WPF框架(四)—DataGrid

    前言 这个框架写到这里,应该有很多同学发现,框架很多地方的细节,其实是违背了MVVM的设计逻辑的. 没错,它的确是违背了. 但为什么明知道违背设计逻辑,还要这样编写框架呢? 那是因为,我们编写的是框架 ...

  6. 1分钟解决VS每次运行都显示“正在还原nuget程序包”问题

    VS一直停留在“正在还原nuget程序包” 在开发中,运行不同版本的vs会显示还原nuget程序包,还原需要不短的时间,并且不一定还原成功. 或者其他什么原因导致需要还原nuget程序包,这样很烦的有 ...

  7. 代理模式 PROXY Surrogate 结构型 设计模式(十四)

    代理模式 PROXY 别名Surrogate 意图 为其他的对象提供一种代理以控制对这个对象的访问. 代理模式含义比较清晰,就是中间人,中介公司,经纪人... 在计算机程序中,代理就表示一个客户端不想 ...

  8. 1.3 使命的完成者Command

    为什么要从Command说起? 因为Command才是Cesium源码中真正意义的绘制细胞.

  9. Web API 持续集成:PostMan+Newman+Jenkins(图文讲解)

    本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上篇文章我们已经完成了API测试工具选型,接下来是一系列周期性的开发 ...

  10. 浅谈Flutter(一):搭建Flutter开发环境

    学习内容来自: Flutter中文网  . Flutter实战 -------------------------------------------------------------------- ...