目录

对图像操作

图像

位图(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,有四个通道

数组是这个样子:

https://myblog-1257298572.cos.ap-shanghai.myqcloud.com/mypic/wp-content/uploads/2021/08/image-20210811112058185.png

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