Opencv的Python API是基于Numpy的。Numpy用来存储和处理多维数组,核心struct是ndarray。
关于numpy.array的使用手册详见:numpy.array的详细手册
下面详解了numpy.array接口、numpy.linalg接口、以及灰度图像和彩色图像的矩阵数字化操作。
1.构造ndarray对象
1.1构造二维的ndarray
代码
注:数组内的元素类型可以由zeros函数入参dtypes指定,可选类型有:uint8、int32、float32、float64等
# -*- coding: utf-8 -*-
"""
@author: tom
"""
#ex_opencv_ndarray.py
import numpy
z = numpy.zeros((2,4),numpy.uint8)#构造2×4的零矩阵
print(type(z))
print(z)
执行结果
技巧:可以在"Variable explorer"窗口查看对象的name、tpye、size以及详细内容value。
1.2构造三维的ndarray
构造m×n×k的三维数组时,可以理解为构造m层个n×k二维数组。每个n×k二维数组占一层,一共m层个二维数组,每个二维数组尺寸大小事n×k。
m×n×k三维数组就是一个m层的堆叠数组,每层是一个尺寸大小为n×k的二维数组~~~~~
想象成3D堆叠内存也不错,一共m层,每层内存都是由n×k的内存颗粒组成的二维内存片
代码
# -*- coding: utf-8 -*-
"""
@author: tom
"""
#ex_opencv_ndarray.py
import numpy
a = numpy.array([
[[1,2,3,4],[5,6,7,8]],
[[11,12,13,14],[15,16,17,18]]
], numpy.float16)
print(type(a))
print(a)
结果
1.3ndarray数组的尺寸shape
1.4ndarray数组的元素类型dtype
# -*- coding: utf-8 -*-
"""
@author: tom
"""
#ex_opencv_ndarray.py
import numpy
a = numpy.array([
[[1,2,3,4],[5,6,7,8]],
[[11,12,13,14],[15,16,17,18]]
], numpy.float16)
print(a.shape) #(2, 2, 4)
print(a.dtype) #float16
2访问ndarray中的值
2.1访问二维ndarray中的值
假设有个二维数组a = [[1, 2, 3],[4, 5, 6]]
2.1.1访问第2行第3列的值,a[1,2]
>>> import numpy
>>> a = numpy.array([[1,2,3],[4,5,6]])
>>> print(a[2,3])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: index 2 is out of bounds for axis 0 with size 2
>>> print(a[1,2])
6
>>>