对图像操作
图像
位图(raster graphics)和矢量图(vector graphics)
位图是有像素的,色彩丰富。矢量图放大不会失真。
通道
单通道
灰度图,每个像素点只有一个值表示,如果图像的深度是4-(256 = 2_2_2*2),那么他的像素值0(黑)~255(白);
三通道
也就是通过见到的彩色图,每个像素点有三个值表示,如果图像深度是4-(256 = 2_2_2*2),那么他的像素值有红(0~255)、绿(0~255)、蓝(0~255)叠加表示,色彩更加艳丽;
四通道
四通道:也就是在三通道图像基础上加上透明程度,Alpha色彩空间,如果图像深度是4-(256 = 2_2_2*2),那么0是完全透明,255是完全不透明;png图像是四通道。
读取图片(numpy的array)
import matplotlib.image as mpimg
im = mpimg.imread(fname)
读取一张200*200的png图像
im.shape() >> (200, 200, 4)
表示像素是200*200,有四个通道
数组是这个样子:
im[0]矩阵,长为200, 宽为4,自己体会一下。
显示图片
import numpy as np
import matplotlib.pyplot as plt
plt.imshow(arr)
#根据像素绘制图片 origin表示渐变程度
numpy.array 的shape属性理解
二维情况
>>> import numpy as np
>>> y = np.array([[1,2,3],[4,5,6]])
>>> print(y)
[[1 2 3]
[4 5 6]]
>>> print(y.shape)
(2, 3)
>>> print(y.shape[0])
2
>>> print(y.shape[1])
3
可以看到y是一个两行三列的二维数组,y.shape[0]代表行数,y.shape[1]代表列数。
三维情况
>>> x = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[0,1,2]],[[3,4,5],[6,7,8]]])
>>>> print(x)
[[[1 2 3]
[4 5 6]]
[[7 8 9]
[0 1 2]]
[[3 4 5]
[6 7 8]]]
>>> print(x.shape)
(3, 2, 3)
>>> print(x.shape[0])
3
>>> print(x.shape[1])
2
>>> print(x.shape[2])
3
可以看到x是一个包含了3个两行三列的二维数组的三维数组,x.shape[0]代表包含二维数组的个数,x.shape[1]表示二维数组的行数,x.shape[2]表示二维数组的列数。
总结
可以看到,shape[0]表示最外围的数组的维数,shape[1]表示次外围的数组的维数,数字不断增大,维数由外到内。
———————————————— 版权声明:本文为CSDN博主「Lavi_qq_2910138025」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/liuweiyuxiang/article/details/79384435
numpy的梯度函数np.gradient(f)
np.gradient(f):用于计算数组f中元素的梯度,当f为多维时,返回每个维度的梯度。
一维
a = np.random.randint(0,20,(5,))>>array([10, 0, 7, 0, 19])
np.gradient(a)>>array([-10. , -1.5, 0. , 6. , 19. ])
由梯度计算公式得到梯度计算结果:
-10=(0-10)/1
-1.5=(7-10)/2
二维
c = np.random.randint(0,50,(3,5))
>>array([[25, 49, 14, 13, 20],
[43, 6, 13, 15, 24],
[ 9, 2, 7, 5, 36]])
np.gradient(c)
>>[array([[ 18. , -43. , -1. , 2. , 4. ],
[ -8. , -23.5, -3.5, -4. , 8. ],
[-34. , -4. , -6. , -10. , 12. ]]),
array([[ 24. , -5.5, -18. , 3. , 7. ],
[-37. , -15. , 4.5, 5.5, 9. ],
[ -7. , -1. , 1.5, 14.5, 31. ]])]
对于二维数组,任意一个元素的梯度存在两个方向,所以求得的梯度为两个数组对象,第一个数组表示最外层维度的梯度值,第二个数组表示第二层维度的梯度值。 对于n维数组,gradient函数会生成n个数组,每个数组代表元素在第n个维度的梯度变化值,梯度反应了元素的变化率,尤其是我们在进行图像,声音等数据处理,梯度有助于帮助我们发现图像和声音的边缘,在那些变化不是很平缓的地方,可以很容易的发现。
———————————————— 版权声明:本文为CSDN博主「June �」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/MachineLearner/article/details/104403097