python-numpy-np.array()函数详解

前言

网上看到一篇证件照换底色的代码,尝试了以下,效果还可以,但是对np.array()函数不怎么理解,于是我在网上查看好久,很多都是零零散散的,要么对格式不了解,要么对返回类型不了解,于是在我看了将近30个网页后我决定自己写一篇( •̀ ω •́ )✧

1.参数说明

numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)

至于这么多参数是干嘛的,我也不像了解哈哈哈,不过使用array函数,从常规的python列表或者元组中创建数组,元素的类型由原序列中的元素类型确定。

2.读入数据

当我们利用cv2读入一张图片时,cv2.imread()返回类型为 <class ‘numpy.ndarray’> 当时我想我可以利用numpy.ndarray()构造函数画一张纯色图(你是不是在想,不是讲np.array()嘛,怎么扯到np.ndarray,哎,别急哈^_~))

import cv2
# 读取照片
img=cv2.imread(D:\Patrick_Star.jpg)#派大星
print(img)
# 输出结果为<class numpy.ndarray>

3.np.ndarray()构造函数

ndarray是一个类,其默认构造函数是ndarray()。 array是一个函数,便于创建一个ndarray对象。 np.ndarray()构造函数相对更low-level一些,使用默认构造函数创建的ndarray对象的数组元素是随机值,而numpy提供了一系列的创建ndarray对象的函数,array()就是其中的一种;通常使用这些上层一点的函数来构造ndarray对象会更方便一些。

img1 = np.ndarray([300,300,3])
print(type(img1))# 输出为<class numpy.ndarray>
print(img1.shape)# 输出为(300, 300, 3)
cv2.imshow(img,img1)
cv2.waitKey(0)

画了一张300*300,通道数为3的纯黑图

4.np.array()函数

但是此时你会发现运行后报错了:error: (-215:Assertion failed) src_depth != CV_16F && src_depth != CV_32S in function ‘convertToShow’

#300行300列的列表
list = []
for i in range(300):
    list.append([36, 27, 237])
img2 = []
for i in range(300):
    img2.append(list)
img2=np.array(img2)
print(type(img2))#输出为<class numpy.ndarray>
print(img2.shape)#输出为(300, 300, 3)
cv2.imshow(img,img2)
cv2.waitKey(0)

5.报错原因

至于为什么我又查了一下:次像素的数据格式有要求,可以指定dtype=np.uint8或者dtype=np.float32,所以稍微改一下就可以生成一张红色图片了

m = np.array([[1,2,3], [2,3,4]])                   # 定义矩阵,int32
m = np.array([[1,2,3], [2,3,4]], dtype=np.float)   # 定义矩阵,float64
经验分享 程序员 微信小程序 职场和发展