参考了https://www.yiibai.com/numpy/numpy_ndarray_object.html。其实opencv对像素进行运算用的就是numpy,它的MATLAB真的很像。学会了numpy,后面像素运算就完全看得懂了,或者说必须会numpy,否则的话,没办法往下学,那么废话不多说,直接开始吧。
下图中可以看到,二维数组的单维是可以元素个数不一样的,比如说下图中的a=np.array([1,2],[3]),只不过打印出来显示的不是矩阵的形式了,从这个角度来看,多维数组要比矩阵灵活一些。
中括号一点要加上,虽然有的时候用小括号或者大括号似乎没问题,但是时不时又会有问题。
还是用中括号吧,下图是我的尝试。
最小维度是2,所以强制加上了一层中括号,必须变成两层以上的中括号,complex是复数的意思,和MATLAB一样,为了和电流i区分,虚数单位用的是j。
数据类型
这些数据类型不是无意义的,如果选错数据类型的话,数据是可能会丢失或者畸变的。
下面是一些例子。
如果参数只有一个可以不加中括号,如果dtype是uint8,数据是255,那还行,因为uint8的范围就是0-255,但是如果是256,就溢出了,溢出的位就被舍弃了,所以就是0,因为256是100000000,dtype改成int16就没有问题了。dtype是整数的时候,如果输入的数据有小数,小数点后面的直接截断舍弃,不是四舍五入。如果输入的是负数,比如-255,我们用uint8存,为什么打印的是1呢?-255需要一个符号位,所以需要16位来存,而计算机里存的都是补码,所以-255是000000011111111,补码是1111111000000001,而我们的dtype是uint8,所以是舍弃了高八位,就是00000001,也就是1。
我也不知道这个端记号是干嘛用的,查了很多资料都没看到。
这个确实类似一种结构体&#