6.20. 总结

本章涵盖了当某项操作没有内置图像库方法可用时,OpenMV 应用会用到的 numpyscipy 的各个部分:

  • 概念 —— ndarray 是什么、为什么紧凑的类型化缓冲区在数值计算中胜过 Python list,以及摄像头支持的 dtype 集合。

  • 形状与索引 —— 视图与副本、用于免分配更新的切片赋值、作为描述符编辑的 transpose()

  • 数学 —— 逐元素运算符、像 sin() 这样的通用函数、广播规则、像 mean() 这样的归约,以及像 where() 这样的选择辅助函数。

  • 线性代数 —— 用于矩阵乘法的 dot()、用于求逆的 inv() / det(),以及 numpy.linalgscipy.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。