昊虹AI笔记网

 找回密码
 立即注册
搜索
查看: 1552|回复: 0
收起左侧

OpenCV的各种矩阵基本运算、基本操作及示例代码(加、减、乘、点乘、点除、乘方、开方、累加、转置、比较等)

[复制链接]

239

主题

241

帖子

926

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
926
昊虹君 发表于 2022-11-18 11:10 | 显示全部楼层 |阅读模式
OpenCV的各种矩阵基本运算、基本操作及示例代码(加、减、乘、点乘、点除、乘方、开方、累加、转置、比较等)

目录
  • 01-两个矩阵相加、矩阵和标量相加
  • 02-带权重(系数)的矩阵加法
  • 03-线性变换
        03-1-两个矩阵的经典线性变换
        03-2-一个矩阵通过经典线性变换转换为另一个矩阵
  • 04-矩阵减法
        04-1-两个矩阵相减、矩阵和标量相减
        04-2-矩阵减法的绝对值
  • 05- 求矩阵中每个元素的相反数
  • 06-矩阵元素乘法(点乘)、矩阵与标量相乘
  • 07-各种累积和
        07-1-矩阵和的累加
        07-2-对矩阵的点乘结果进行累加
        07-3 按alpha比例累加(带权重的累加)
        07-4 矩阵各元素平方值的累加
  • 08-矩阵乘法
  • 09-矩阵元素的乘方、平方根
        09-1 矩阵元素的乘方
        09-2 矩阵元素的平方根
  • 10-矩阵的元素除法(点除)【真除,既保留整数也保留小数】
  • 11 -矩阵的元素除法(点除)取整
  • 12-矩阵的元素除法(点除)取余
  • 13-矩阵的转置
  • 14-矩阵与矩阵的比较运算,矩阵与标量的比较运算
  • 15-其它(方程根、位运算、映射、矩阵变换、傅里叶变换、幅值、相位、特征值、逆、通道(矩阵)合并与拆分、期望、方差、随机数等)

01-两个矩阵相加、矩阵和标量相加
可以使用函数add()实现两个矩阵相加,矩阵和标量相加。
因为函数add()的内容较多,所以单独写了一篇博文介绍函数add(),
博文链接 https://www.hhai.cc/thread-140-1-1.html

02-带权重(系数)的矩阵加法
可以用函数cv::addWeighted()实现带权重(系数)的矩阵加法,其官方文档介绍如下:

如果认真阅读了博文 https://www.hhai.cc/thread-140-1-1.html对函数add()的说明,应该很容易明白这个函数的使用,所以就不做额外说明了,示例代码也不给了。
只是要注意下,它不能实现矩阵与标量的带权重(系数)的加法,并且两个相加的矩阵必须是相同尺寸和通道数的矩阵。当输出矩阵的数据类型为CV_32S时,不会对结果做saturate(饱和)操作,关于饱和操作是怎样的操作,大家可参考下面这篇博文 :
https://www.hhai.cc/thread-141-1-1.html

03-线性变换

03-1-两个矩阵的经典线性变换
可以用函数cv::scaleAdd()实现两个矩阵的经典线性变换,其官方文档介绍如下:

官方文档已经写得很清楚它的用法了,这里就先不上示例代码了,只要是要注意三个矩阵的尺寸和数据类型都是一样的。

03-2-一个矩阵通过经典线性变换转换为另一个矩阵
可以用函数Mat::convertTo()实现一个矩阵通过经典线性变换转换为另一个矩阵
Mat::convertTo()的运算原理如下:

具体的介绍请参阅官方文档,点此查看官方文档链接


04-矩阵减法

04-1-两个矩阵相减、矩阵和标量相减
可以用函数cv::subtract()实现两个矩阵相减、矩阵和标量相减,官方文档对其介绍如下:

从上面的文档介绍可以看出,其用法与cv::add()的用法类似,所以这里就不多介绍了,示例代码也暂时不给了。

04-2-矩阵减法的绝对值
可以用函数absdiff()实现这个功能,
详细介绍请参见官方文档,
官方文档链接如下:
https://docs.opencv.org/4.4.0/d2 ... 1cbc114a758a2b79c14

05- 求矩阵中每个元素的相反数
OpenCV矩阵的元素数据类型有以下这些:
CV_8U、CV_8S、CV_16U、CV_16S、CV_32S、CV_32F、CV_64F
求相反数的话显然数据类型要为带符号的数据类型,
上面的数据类型中有带符号的有:CV_8S、CV_16S、CV_32S、CV_32F、CV_64F。
可以用函数cv::subtract()的第四种形式实现求矩阵中每个元素的相反数,其第四种形式如下:

也可以直接用减号实现,当直接用减号时,实际上也是将操作符“-”重载为了函数cv::subtract()实现的。
示例代码如下:
[C++] 纯文本查看 复制代码
//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询

//OpenCV版本 OpenCV3.0

#include <opencv2/opencv.hpp>

#include <iostream>
using namespace std;

int main()
{

	cv::Mat A1(2, 3, CV_8SC1, cv::Scalar(98));
	cout << "A1中的数据为:\n" << A1 << endl << endl;

	//第一种方法实现求矩阵每个元素的相反数
	cv::Mat B1 = -A1;
	cout << "B1中的数据为:\n" << B1 << endl << endl;

	//第二种方法实现求矩阵中每个元素的相反数
	cv::Mat C1;
	cv::subtract(0,A1,C1);
	cout << "C1中的数据为:\n" << C1 << endl << endl;

	return(0);
}

运行结果如下:


06-矩阵元素乘法(点乘)、矩阵与标量相乘
可以用函数cv::multiply()和函数cv::Mat::mul()实现矩阵元素乘法(点乘)、矩阵与标量相乘。
官方文档对其介绍如下:

上面的文档对函数cv::multiply()的介绍是比较清楚了,补充说明几点:
①其两个输入矩阵要求是相同的尺寸和相同的通道数,注意数据类型可以不一样,当数据类型不一样时,还是像函数add()那样,由参数dtype来指定输出矩阵的类型,关于函数add()的详细介绍,请大家参考博文 https://www.hhai.cc/thread-140-1-1.html

②如何使用这个函数实现矩阵与标量相乘?很简单,按照下面这个公式:

我们只需要把其中一个矩阵设为全1的矩阵就行了嘛。
昊虹君忍不住要在这里插一句,如果要做矩阵与标量相乘,完全没必要为了使用函数cv::multiply()而去使用函数cv::multiply(),一个简单的实现方法是用运算符“*”实现。
示例代码如下:
[C++] 纯文本查看 复制代码
//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询

//OpenCV版本 OpenCV3.0

#include <opencv2/opencv.hpp>

#include <iostream>
using namespace std;

int main()
{

	cv::Mat A1 = (cv::Mat_<float>(2, 3) << 1, 200, 3, 4, 5, 6);
	cout << "A1中的数据为:\n" << A1 << endl << endl;

	cv::Mat B1(A1.size(), A1.type(), cv::Scalar(1));
	cout << "B1中的数据为:\n" << B1 << endl << endl;

	double scale1 = 1.4;

	cv::Mat C1;
	cv::multiply(A1, B1, C1, scale1);
	cout << "C1中的数据为:\n" << C1 << endl << endl;

	cv::Mat D1;
	cv::multiply(A1, B1, D1, scale1, CV_8U);
	cout << "D1中的数据为:\n" << D1 << endl << endl;


	return(0);
}

运行结果如下:

代码说明:
在上面的代码中把B1设置为尺寸与A相同的矩阵,并且B1中的元素全为1,这样就变向实现了A1与标量scale1进行相乘。
C1和D1的区别在于计算C1时没有设置C1的数据类型,而计算D1时设置了D1的数据类型为CV_8U。
从结果我们看到了D1由于设置了数据类型,所以对运算结果进行了两种操作,一是四舍五入,二是饱和操作。关于饱和操作,可见我的另一篇博文:https://www.hhai.cc/thread-141-1-1.html
③函数mul()是函数multiply()的友好变体,下面这句代码:
  1. cv::multiply(A1, B1, C1, scale1);
复制代码

等效于:
  1. cv::Mat C1 = A1.mul(2 * B1);
复制代码

还可以用运算符 * 实现矩阵与标量的相乘,结果的数据类型由参与运算的矩阵的元素数据类型和标量的数据类型确定,示例如下:
[C++] 纯文本查看 复制代码
//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询

//OpenCV版本 OpenCV3.0

#include <opencv2/opencv.hpp>

#include <iostream>
using namespace std;

int main()
{

	cv::Mat A1 = (cv::Mat_<float>(2, 3) << 1, 2, 3, 4, 5, 6);
	cout << "A1中的数据为:\n" << A1 << endl << endl;

	double scale1 = 1.4;
	cv::Mat B1 = scale1 * A1;

	cout << "B1中的数据为:\n" << B1 << endl << endl;


	return(0);
}

运行结果如下:


07-各种累积和
07-1-矩阵和的累加
可以用函数cv::accumulate()实现矩阵各元素和的累加,其官方文档介绍下:

示例代码就不给了,要特别注意的是数据类型应该为浮点型。

07-2-对矩阵的点乘结果进行累加
可以利用函数cv::accumulateProduct()实现对矩阵各元素点乘的结果进行累加,
函数cv::accumulateProduct()的官方文档如下:

同样要注意数据类型要求为浮点型,示例代码如下:
[C++] 纯文本查看 复制代码
//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询

//OpenCV版本 OpenCV3.0


#include <opencv2/opencv.hpp>

#include <iostream>
using namespace std;

int main()
{

	cv::Mat A1 = (cv::Mat_<float>(2, 3) << 1, 2, 3, 4, 5, 6);
	cout << "A1中的数据为:\n" << A1 << endl << endl;


	cv::Mat B1 = (cv::Mat_<float>(2, 3) << 2, 3, 4, 5, 6, 7);
	cout << "B1中的数据为:\n" << B1 << endl << endl;

	cv::Mat C1 = (cv::Mat_<float>(2, 3) << 3, 4, 5, 6, 7, 8);
	cout << "没做累加前C1中的数据为:\n" << C1 << endl << endl;

	cv::accumulateProduct(A1, B1, C1);

	cout << "做了累加后C1中的数据为:\n" << C1 << endl << endl;

	return(0);
}

运行结果如下:


07-3 按alpha比例累加(带权重的累加)
可以用函数cv::accumulateWeighted()实现矩阵元素按alpha比例累加(带权重的累加),
其官方文档如下:

示例代码就不暂时不给了,同样要注意数据类型需要为浮点型。
还有上面文档中的running average我觉得可以翻译为滑动平均。

07-4 矩阵各元素平方值的累加
可以用函数accumulateSquare()实现各元素平方值的累加,其官方文档如下:

示例代码就不暂时不给了,同样要注意数据类型需要为浮点型。

08-矩阵乘法
可以用运算符“*”实现矩阵乘法,示例代码如下:
[C++] 纯文本查看 复制代码
//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询

//OpenCV版本 OpenCV3.0


#include <opencv2/opencv.hpp>

#include <iostream>
using namespace std;

int main()
{

	cv::Mat A1 = (cv::Mat_<float>(2, 3) << 1, 2, 3, 4, 5, 6);
	cout << "A1中的数据为:\n" << A1 << endl << endl;


	cv::Mat B1 = (cv::Mat_<float>(3, 2) << 2, 3, 4, 5, 6, 7);
	cout << "B1中的数据为:\n" << B1 << endl << endl;

	cv::Mat C1 = A1*B1;
	cout << "C1中的数据为:\n" << C1 << endl << endl;

	return(0);
}

注意:类型必须为浮点型,可以为“CV_32F或CV_64F”,而且似乎只支持一通道或两通道,三通道似乎不支持。
把上面的float改为uchar,那么报错如下:

运行结果如下:

我们手工验证下第一个结果:
12+24+3*6=2+8+18=28
可见的确做的是矩阵标准乘法。

09-矩阵元素的乘方、平方根

09-1 矩阵元素的乘方
可以用函数pow()实现矩阵元素的乘方。
详细介绍见官方文档,官方文档链接如下:
https://docs.opencv.org/4.4.0/d2 ... 92500d6f6cf6bac41ef

09-2 矩阵元素的平方根
可以用函数sqrt()实现求矩阵元素的平方根。
详细介绍见官方文档,官方文档链接如下:
https://docs.opencv.org/4.4.0/d2 ... 7890f88df5a1f64a7d7


10-矩阵的元素除法(点除)【真除,既保留整数也保留小数】
可以用函数cv::divide()和函数cv::mul()实现矩阵的元素除法(点除),其官方文档如下:

它的用法与函数cv::multiply()基本一样,所以它需要注意的地方请参见本篇博文对函数cv::multiply()的介绍。
示例代码如下:
[C++] 纯文本查看 复制代码
//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询

//OpenCV版本 OpenCV3.0

#include <opencv2/opencv.hpp>

#include <iostream>
using namespace std;


int main()
{

	cv::Mat A1 = (cv::Mat_<float>(2, 3) << 1, 2, 3, 4, 5, 6);
	cout << "A1中的数据为:\n" << A1 << endl << endl;


	cv::Mat B1 = (cv::Mat_<float>(2, 3) << 2, 3, 4, 5, 6, 7);
	cout << "B1中的数据为:\n" << B1 << endl << endl;


	cv::Mat C1;
	double scale = 2;
	cv::divide(B1, A1, C1, scale);
	cout << "C1中的数据为:\n" << C1 << endl << endl;

	cv::Mat C2 = B1.mul(scale / A1);
	cout << "C2中的数据为:\n" << C1 << endl << endl;

	return(0);
}

运行结果如下:

从以上运行结果可以看出:
代码"cv::divide(B1, A1, C1, scale);"等效于“cv::Mat C1 = B1.mul(scale / A1);”

我们把数据类型换为uchar,会发现结果做的是五舍六入而不是四舍五入同,代码如下:我们把数据类型换为uchar,会发现结果做的是五舍六入而不是四舍五入同,代码如下:
[C++] 纯文本查看 复制代码
//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询

//OpenCV版本 OpenCV3.0

#include <opencv2/opencv.hpp>

#include <iostream>
using namespace std;


int main()
{

	cv::Mat A1 = (cv::Mat_<uchar>(2, 3) << 1, 2, 3, 4, 5, 6);
	cout << "A1中的数据为:\n" << A1 << endl << endl;


	cv::Mat B1 = (cv::Mat_<uchar>(2, 3) << 2, 3, 4, 5, 6, 7);
	cout << "B1中的数据为:\n" << B1 << endl << endl;


	cv::Mat C1;
	double scale = 2;
	cv::divide(B1, A1, C1, scale);
	cout << "C1中的数据为:\n" << C1 << endl << endl;

	cv::Mat C2 = B1.mul(scale / A1);
	cout << "C2中的数据为:\n" << C1 << endl << endl;



	return(0);
}

uchar类型运行结果如下:


对比浮点型的结果:


11 -矩阵的元素除法(点除)取整
这个目前博主没有发现相关函数,不过可以先做元素真除,然后用下面三个函数实现
向上取整函数cvCeil(),往数轴的正方向取整,比如3.1会取为4,-1.8会取为-1;
向下取整函数cvFloor(),往数轴的负方向取整,比如3.7会取为3,-1.1会取为-2;
四舍五入函数cvRound()

12-矩阵的元素除法(点除)取余
关于这个操作,这个目前博主没有发现相关函数,似乎只能让每个元素与每个元素作“%”运算。
或者也可以将真除结果与向下取整的结果相减实现。

13-矩阵的转置
可以用函数cv::transform()实现矩阵的转置。
官方文档如下:

示例代码如下:
[C++] 纯文本查看 复制代码
//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询

//OpenCV版本 OpenCV3.0

#include <opencv2/opencv.hpp>

#include <iostream>
using namespace std;

int main()
{

	cv::Mat A1 = (cv::Mat_<uchar>(2, 3) << 1, 2, 3, 4, 5, 6);
	cout << "A1中的数据为:\n" << A1 << endl << endl;


	cv::Mat B1;

	cv::transpose(A1, B1);
	cout << "B1中的数据为:\n" << B1 << endl << endl;


	return(0);
}

运行结果如下:


14-矩阵与矩阵的比较运算,矩阵与标量的比较运算
可以用函数compare()实现矩阵的比较运算,某一个元素如果比较的结果为真,则在输出矩阵中其值为255.
如果您希望把两个矩阵中的较大值或较小值保留下来,可以使用函数max()和min()实现,详情可参看页面:https://www.hhai.cc/thread-157-1-1.html

函数compare()的原型如下:
  1. void cv::compare(InputArray src1,
  2.                  InputArray src2,
  3.                  OutputArray dst,
  4.                  int cmpop)
复制代码

详情介绍见官方文档:
https://docs.opencv.org/4.4.0/d2 ... bb36d884650c09a3a97
注意:第三个参数用于设置两个矩阵作怎样的比较值,其可取值及意义如下:

示例代码如下:
[C++] 纯文本查看 复制代码
//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询

//OpenCV版本 OpenCV3.0

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main()
{

	cv::Mat A1 = (cv::Mat_<uchar>(3, 3) << 1, 2, 3,
		4, 5, 6,
		7, 8, 9);

	cv::Mat B1 = (cv::Mat_<uchar>(3, 3) << 0, 1, 2,
		4, 5, 6,
		11, 12, 13);

	Mat C1;

	compare(A1, B1, C1, CMP_GT);

	cout << C1 << endl;


	return(0);
}

运行结果如下:


15-其它(方程根、位运算、映射、矩阵变换、傅里叶变换、幅值、相位、特征值、逆、通道(矩阵)合并与拆分、期望、方差、随机数等)
在下面这个官方文档页面
https://docs.opencv.org/4.4.0/d2/de8/group__core__array.html
列举出了OpenCV的所有矩阵基本运算或操作。
时间精力有限,也不可能一一再去细究,所以只列出关键字及对应的函数名,
只要知道有哪些运算和对应的函数名,
将来在使用时即可快速上手。
如下:
**********
最近邻搜索-Nearest_neighbor_search
cv::batchDistance

计算两幅图像的峰值信噪比 (PSNR)
cv::PSNR

求解一个或多个线性系统或最小二乘问题
cv::solve

求解三次方程的实根
cv::solveCubic

求解多项式方程的实根或复根
cv::solvePoly

计算矩阵中的非零元素个数
cv::countNonZero

返回非零像素的位置列表
cv::findNonZero
**********
位运算之按位与运算
cv::bitwise_and
关于cv::bitwise_and的详细介绍请参看博文 https://www.hhai.cc/thread-158-1-1.html

位运算之按位或运算
cv::bitwise_or
关于cv::bitwise_or的详细介绍请参看博文 https://www.hhai.cc/thread-158-1-1.html

位运算之按位取反运算
cv::bitwise_not
关于cv::bitwise_not的详细介绍请参看博文 https://www.hhai.cc/thread-158-1-1.html

位运算之按位异或运算
cv::bitwise_xor
关于cv::bitwise_xor的详细介绍请参看博文 https://www.hhai.cc/thread-158-1-1.html
**********
检查每一个元素的值是否在某个范围内
cv::checkRange

检查数组元素是否位于另外两个数组的元素之间
cv::inRange
**********
直角坐标转换到极坐标
cv::cartToPolar

查表映射
cv::LUT
关于cv::LUT的详细介绍请参看博文 https://www.hhai.cc/thread-159-1-1.html

对矩阵的每一行或每一列进行排序
cv::sort    cv::sortIdx

矩阵的线性变换(新的矩阵中的每个元素值是矩阵乘法的结果)
cv::transform

将矩阵数据类型转换为半精度的浮点数(通常的浮点数为32位,这里为16位)
cv::convertFp16

缩放、计算绝对值并将结果转换为 8 位。
cv::convertScaleAbs

归一化(规范化)矩阵的范数或数值范围
cv::normalize

将 NaN 转换为给定的数字
(NaN Not a Number,非数)是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。常在浮点数运算中使用。首次引入NaN的是1985年的IEEE 754浮点数标准。
cv::patchNaNs

执行向量的透视矩阵转换
cv::perspectiveTransform

以 90 度的倍数旋转 2D 阵列。
cv::rotate

将矩阵简化为向量(降维处理,二维转一维)
cv::reduce
**********
执行 1D 或 2D 数组的正向或反向离散余弦变换
cv::dct

计算一维或二维数组的离散余弦逆变换
cv::idct

求给定矢量大小的最佳 DFT 大小(尺寸)
cv::getOptimalDFTSize

计算一维或二维数组的离散傅里叶逆变换
cv::idft

执行两个傅里叶谱的元素乘法
cv::mulSpectrums
**********
计算二维矢量的大小(模-幅值)
cv::magnitude

二维矢量的相位计算(旋转角度)
cv::phase

计算两个向量之间的马氏距离
cv::Mahalanobis

计算矩阵的绝对范数
cv::norm
**********
计算对称矩阵的特征值和特征向量
cv::eigen

计算非对称矩阵的特征值和特征向量(仅限实特征值)
cv::eigenNonSymmetric

计算矩阵的逆矩阵或伪逆矩阵
cv::invert

计算矩阵的迹线
cv::theRNG

广义矩阵乘法
cv::gemm

计算矩阵与其转置矩阵的乘积
cv::mulTransposed
**********
计算以自然数e为底数,输入矩阵为指数的幂值。
cv::exp

计算自然对数
cv::log
**********
cv::extractChannel
多通道矩阵提取某个通道

cv::insertChannel
为图像或矩阵插入通道

将指定的通道从输入阵列复制到输出阵列的指定通道。
cv::mixChannels

通道或矩阵合并
cv::merge
关于cv::merge的详细介绍请参看博文 https://www.hhai.cc/thread-151-1-1.html

通道或矩阵拆分
cv::split
关于cv::split的详细介绍请参看博文 https://www.hhai.cc/thread-151-1-1.html

分解矩阵并将结果存储到用户提供的矩阵中
cv::SVDecomp

水平方向上拼接两个给定矩阵
cv::hconcat
关于cv::hconcat()的详细介绍见 https://www.hhai.cc/thread-160-1-1.html

垂直方向上拼接两个给定矩阵
cv::vconcat
关于cv::vconcat()的详细介绍见 https://www.hhai.cc/thread-160-1-1.html
**********
取两个矩阵或矩阵与标量的最大值
cv::max
关于cv::max的详细介绍请参看博文 https://www.hhai.cc/thread-157-1-1.html

取两个矩阵或矩阵与标量的最小值
cv::min
关于cv::min的详细介绍请参看博文 https://www.hhai.cc/thread-157-1-1.html

计算矩阵元素的总和
cv::sum

计算矩阵元素的平均值
cv::mean
对cv::mean的详细介绍见博文 https://www.hhai.cc/thread-156-1-1.html

计算矩阵的均值和标准差
cv::meanStdDev
官方文档链接:
https://docs.opencv.org/4.4.0/d2 ... 59493d7c6a4354b301d
对cv::meanStdDev的详细介绍见博文 https://www.hhai.cc/thread-156-1-1.html

计算一组向量的协方差矩阵
cv::calcCovarMatrix

查找矩阵的最小和最大元素值及其位置
cv::minMaxIdx  和 cv::minMaxLoc
对cv::minMaxLoc的详细介绍见博文 https://www.hhai.cc/thread-153-1-1.html
**********
将数据从 PCA 空间投影回原始空间,重建原始数据
cv::PCABackProject

对数据作主成分分析
cv::PCACompute

将输入数据投影到 PCA 特征空间
cv::PCAProject
**********
边界外推值确定
cv::borderInterpolate

矩阵翻转(镜像)
cv::flip

将方阵的下半部分或上半部分复制到另一半(对称复制)
cv::completeSymm

用输入数组的重复副本填充输出数组(重复填充)
cv::repeat
**********
设置默认随机数生成器的状态(设置种子值)
cv::setRNGSeed

用正态分布的随机数填充数组
cv::randn

多组(多线程)随机数生成器
cv::theRNG

随机排列数组元素(打乱矩阵原有元素的顺序)
cv::randShuffle

延伸阅读:
Python_Numpy库中各种矩阵基本运算(加、减、乘、点乘、点除、乘方、转置等)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|昊虹AI笔记网 ( 蜀ICP备2022024117号-1 )

GMT+8, 2024-4-29 22:47 , Processed in 0.029129 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表