python科学计算库numpy和绘图库PIL的结合,素描图片(原创)
# 导入绘图库
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的结合,素描图片(原创)的更多相关文章
- Python科学计算库Numpy
Python科学计算库Numpy NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 1.简 ...
- [Python学习] python 科学计算库NumPy—矩阵运算
NumPy库的核心是矩阵及其运算. 使用array()函数可以将python的array_like数据转变成数组形式,使用matrix()函数转变成矩阵形式. 基于习惯,在实际使用中较常用array而 ...
- Python科学计算库-Numpy
NumPy 是 Python 语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,也是学习 python 必学的一个库. 1. 读取文件 numpy.gen ...
- Python 科学计算库numpy
Numpy基础数据结构 NumPy数组是一个多维数组对象,称为ndarray.其由两部分组成: 实际的数据 描述这些数据的元数 # 多维数组ndarray import numpy as np ar ...
- [Python学习] python 科学计算库NumPy—tile函数
在学习knn分类算法的过程中用到了tile函数,有诸多的不理解,记录下来此函数的用法. 函数原型:numpy.tile(A,reps) #简单理解是此函数将A进行重复输出 其中A和reps都是ar ...
- Python科学计算库
Python科学计算库 一.numpy库和matplotlib库的学习 (1)numpy库介绍:科学计算包,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换.随机数生成 ...
- 科学计算库Numpy基础&提升(理解+重要函数讲解)
Intro 对于同样的数值计算任务,使用numpy比直接编写python代码实现 优点: 代码更简洁: numpy直接以数组.矩阵为粒度计算并且支持大量的数学函数,而python需要用for循环从底层 ...
- python科学计算库的numpy基础知识,完美抽象多维数组(原创)
#导入科学计算库 #起别名避免重名 import numpy as np #小技巧:从外往内看==从左往右看 从内往外看==从右往左看 #打印版本号 print(np.version.version) ...
- numpy科学计算库的基础用法,完美抽象多维数组(原创)
#起别名避免重名 import numpy as np #小技巧:print从外往内看==shape从左往右看 if __name__ == "__main__": print(' ...
随机推荐
- 彻底关闭windows10自动更新解决方案
window10的自动更新其实和window7和window8都有所不同,有些人认为只要停止了windows updates 就可以了,不会再开始了! 但是往往不是这样的,因为微软在window up ...
- ajax data属性传值的方式总结
在和后台同事对接口的时候,有一个小问题一直困扰着我.那就是用ajax请求后台接口数据,需要用data属性传值的时候,data属性传值的方式感觉没有统一用一种方式. 后来仔细想想,其实哪种方式都可以,主 ...
- 经典排序算法 — C# 版(上)
提起排序,与我们的息息相关,平时开发的代码少不了排序. 经典的排序算法又非常多,我们怎么评价一个排序算法的好坏呢? 其实可以这样想,要细致的比较排序算法好坏,那我们就从多方面尽可能详细的对比 一.效率 ...
- Ubuntu 安装php+mysql+nginx
0x01 安装PHP https://blog.csdn.net/Msmile_my/article/details/73647809 1.添加php的仓库 sudo apt-get instal ...
- mybatis框架(7)---mybatis逆向工程
mybatis逆向工程 逆向工程的目的就是缩减了我们的开发时间.所谓mybatis逆向工程,就是mybatis会根据我们设计好的数据表,自动生成pojo.mapper以及mapper.xml. 接 ...
- [macOS开发.NET Core] 开篇 & 抉择 & 先利其器
一直以来MacBook是大多数开发者的首选,无论是macOS的便利性,还是MBP的外观,更或者是为了装13,我一直认为一个开发者必须得拥有一部MBP.虽然最后的因素是大多数的. 终于在我的努力下说服下 ...
- 一个用来爬小说的简单的Node.js爬虫
小说就准备点天下霸唱和南派三叔的系列,本人喜欢看,而且数据也好爬.貌似因为树大招风的原因,这两作者的的书被盗版的很多,乱改的也多.然后作者就直接在网上开放免费阅读了,还提供了官网,猜想作者应该是允许爬 ...
- SLAM+语音机器人DIY系列:(二)ROS入门——4.如何编写ROS的第一个程序hello_world
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- 解读经典《C#高级编程》继承 页107-113.章4
前言 本章节开始讲接口. 接口 接口的声明很像抽象类,有方法的声明但无方法体.但它比抽象类限制更多.和类比起来,接口的定义有众多限制. 接口只能包含声明,而无方法体 接口只能包含方法.属性.索引器.事 ...
- js转换时间戳-转换成 yyyy-MM-dd HH:mm:ss
比如:转换成 yyyy-MM-dd HH:mm:ss //时间戳转换方法 date:时间戳数字 function formatDate(date) { var date = new Date(date ...