python之SciPy简介

1.SciPy是什么

    SciPy是python的一个著名的开源科学库,SciPy一般都是操纵NumPy数组来进行科学计算,统计分析,可以说是基于NumPy之上。SciPy提供了许多科学计算的库函数,如线性代数,微分方程,信号处理,图像处理,系数矩阵计算等,

 

2.Scipy安装

官网:http://www.scipy.org/SciPy

安装:假定python安装目录在C:\Python27,则在C:\Python27\Scripts下打开cmd执行

执行命令:pip install scipy

 

3.应用例子

3.1 scipy的hello world

用io模块保存与读取mat文件

from scipy import io
import numpy as np

l1 = np.arange(1,10)   # 创建等差数组 [1 2 3 4 5 6 7 8 9]
matrix1 = l1.reshape(3,3)  # 创建矩阵
'''
[[1 2 3]
 [4 5 6]
 [7 8 9]]
'''
io.savemat('matrix1.mat',{'array':matrix1})  # 保存矩阵文件,第一个参数为要保存的文件名,第二个是要保存的数组
data = io.loadmat('matrix1.mat')  # 读取矩阵文件
print(data['array'])     # 输出矩阵文件
'''
[[1 2 3]
 [4 5 6]
 [7 8 9]]
'''

3.2 计算欧式距离,(应用于机器学习KNN算法实现一种)

import numpy as np
from scipy.spatial.distance import pdist,squareform,cdist

x1 = np.array([[1,1]])
x2 = np.array([[4,5]])
# 通过cdist函数,计算两个点之间的距离
distance = cdist(x1,x2, 'euclidean')
#scipy.spatial.distance.cdist(XA, XB, metric='euclidean', p=None, V=None, VI=None, w=None),该函数用于计算两个输入集合的距离,
# 通过metric参数指定计算距离的不同方式得到不同的距离度量值
# metric = "euclidean"表示计算欧式距离   https://blog.csdn.net/kancy110/article/details/75675574
print(distance)  #[[ 5.]]
#创建一个数组,数组的每一行都是一个2维的数组,相当于三个点
x = np.array([[1,1],[4,5],[7,9]])
# 计算每个行的一个点与本身以及另外两个点的欧式距离
x_d = squareform(pdist(x,"euclidean"))  # pdist用于计算 X 中各对行向量的相互距离,squareform对求得的值开平方
# 欧式距离计算公式:sqrt((x1-x2)^2+(y1-y2)^2)
print(x_d)
'''
[[  0.   5.  10.]
 [  5.   0.   5.]
 [ 10.   5.   0.]]
'''

3.3 图像基本处理

(1) 读取图像基本信息

from scipy.misc import imread,imsave,imresize

if __name__ == "__main__":
    # 读取图片
    img = imread("kobe.png")
    # 获取图片的数据类型
    img_type = img.dtype
    print(img_type)  # uint8
    # 读取图片的大小
    img_shape = img.shape # (383, 684, 4)
    print(img_shape)
    # 获取图片的高
    img_height = img_shape[0]
    print(img_height)  # 383
    # 获取图片的宽
    img_width = img_shape[1]
    print(img_width)  # 684
    # 获取图片的通道数
    img_channel = img_shape[2]
    # 通道数为1表示黑白图片,3表示彩色图片
    # 4通道通常为RGBA
    print(img_channel) # 4

注意这里通道为4,常见的道道为1,3,1表示灰度图,3表示彩色图。

4表示rgba,r表示红色,g表示绿色,b表示蓝色,a是Alpha,表示不透明度,如果一个像素的alpha通道数值为0%,则表示是完全透明看不见的。因此4实际上就是通道3+不透明度alpha

(2)修改图片尺寸,颜色,裁剪

用到scipy一个图像处理的包:misc

代码如下:

from scipy.misc import imread,imsave,imresize

if __name__ == "__main__":
    # 读取图片
    img = imread("kobe.png")
    # 通过改变图片每一个通道的比例来改变图片的色彩
    # 将图片R G B的比例设置为1,0.8,0.7,0.9
    img_tint = img * [1,0.9,0.9,0.9]
    # 保存图片,f发现图片变深了一些
    imsave("kobe_color.png", img_tint)
    # 改变图片大小
    img_resize = imresize(img, (500,500)) # 图片大小设置为500*500
    # 保存图片
    imsave("kobe_resize.png", img_resize) # 图片被缩减了,因为不是等比例的缩放,图片有点变形
    # 裁剪图片
    img_incision = img[100:400, 200:500]
    imsave("kobe_incision.png", img_incision)

结果如下:

变色 kobe_color.png

改变大小 kobe_resize.png

裁剪  kobe_resize.png

 

参考资料

https://blog.csdn.net/sinat_29957455/article/details/78636621

https://blog.csdn.net/wsp_1138886114/article/details/80444621

 

  • 9
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值