《OpenCV 4计算机视觉项目实战 》 —2.10 基本矩阵运算
2.10 基本矩阵运算
在本节中,我们将学习一些基本和重要的矩阵运算,这些运算可以应用于图像或任何矩阵数据。我们已经知道如何加载图像并将其存储在变量Mat中,此外还可以手动创建Mat。最常见的构造函数是为矩阵提供大小和类型,如下所示:
你可以通过构造函数Mat(size,type,pointer_to_buffer)用来自第三方库的存储缓冲区创建一个新的矩阵链接,而无须复制数据。
受支持的类型取决于要存储的数字类型和通道数,最常见的类型如下:
你可以使用CV_number_typeC(n)创建任何类型的矩阵,其中number_type是8位无符号(8U)到64位浮点(64F),其中(n)是通道数,允许的通道数范围为1~CV_CN_MAX。
初始化不会设置数据的值,因此可能获得不需要的值。为了避免不需要的值,可以使用0或1值及其各自的函数来初始化矩阵:
前面矩阵的结果如图2-6所示。
图 2-6
一个特殊矩阵初始化是eye函数,它可以创建具有指定类型和大小的单位矩阵:
其输出如图2-7所示。
图 2-7
OpenCV的Mat类能够执行所有的矩阵运算。我们可以用+和-运算符来加上或减去两个相同大小的矩阵,如以下代码块所示:
上述操作的结果如图2-8所示。
图 2-8
我们可以用*运算符乘以一个标量,或者用mul函数乘以矩阵的每个元素,也可以用*运算符执行矩阵乘法:
上述操作的结果如图2-9所示。
图 2-9
其他常见的数学矩阵运算是转置(transposition)和矩阵求逆(matrix inversion),分别由t()和inv()函数定义。OpenCV提供的其他有趣的函数是矩阵中的数组运算,例如,计算非零元素。这对于计算对象的像素或区域很有用:
OpenCV提供了一些统计功能,可以使用meanStdDev函数计算通道的平均值和标准差:
另一个有用的统计函数是minMaxLoc,该函数可以查找矩阵或数组的最小值和最大值,并返回位置和值:
这里的src是输入矩阵,minVal和maxVal是检测到的最小值和最大值,minLoc和maxLoc是检测到的Point值。
其他核心和有用的功能在http://docs.opencv.org/modules/core/doc/core.html中有详细介绍。
- 点赞
- 收藏
- 关注作者
评论(0)