6.20. 总结¶
本章涵盖了当某项操作没有内置图像库方法可用时,OpenMV 应用会用到的 numpy 和 scipy 的各个部分:
概念 ——
ndarray是什么、为什么紧凑的类型化缓冲区在数值计算中胜过 Pythonlist,以及摄像头支持的 dtype 集合。形状与索引 —— 视图与副本、用于免分配更新的切片赋值、作为描述符编辑的
transpose()。数学 —— 逐元素运算符、像
sin()这样的通用函数、广播规则、像mean()这样的归约,以及像where()这样的选择辅助函数。线性代数 —— 用于矩阵乘法的
dot()、用于求逆的inv()/det(),以及numpy.linalg和scipy.linalg下用于结构更复杂问题的各种分解与求解器。信号处理 ——
fft()、用于数字滤波的sosfilt(),以及用于在流式循环中免分配地计算幅度谱的spectrogram()。曲线与积分 ——
interp()、polyfit()/polyval()、用于短 FIR 滤波的convolve()、用于对采样数据进行梯形积分的trapz()。求解器与随机数 —— 用于对 Python 可调用对象求积的
scipy.integrate、用于求根与最小化的scipy.optimize、用于统计专用函数的scipy.special,以及用于伪随机采样的Generator。图像 —— 用于图像库未覆盖的少数情形的
to_ndarray()与image.Image桥接。性能 —— 小 dtype、预分配缓冲区、原地运算符、
out=关键字,以及在流式循环中提防布尔掩码引发的频繁分配。
这些涵盖了摄像头其余部分所依赖的通用数值计算工作。numpy 是当某项操作在 Image 上没有内置方法时应用所求助的工具箱——比如自定义像素变换、标定求解、对缓冲音频做 FFT。