OpenCV函数:cvGEMM

执行广义矩阵乘法,代表的是GEneralized Matrix Multiplication,cvGEMM()可以处理线性代数方面许多的乘法运算!

double cvGEMM(//矩阵的广义乘法运算
  const CvArr* src1,//乘数矩阵
  const CvArr* src2,//乘数矩阵
  double alpha,//1号(src1)矩阵系数
  const CvArr* src3,//加权矩阵
  double beta,//src3矩阵系数
  CvArr* dst,//结果矩阵
  int tABC = 0//变换标记
);

tABC变换标记及其对应的含义

GEMM_1_T transposes src1.(转置src1)

GEMM_2_T transposes src2. (转置src2)

GEMM_3_T transposes src3. (转置src3)

函数对应的乘法运算公式为:dst = (alpha*src1)xsrc2+(beta*src3)

 

<span style="font-size:18px;"><span style="font-size:18px;">/*------------这段代码主要是cvGEMM的一个简单demo--------------*/
#include<opencv2\opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

int main()
{
	double a[3][3]=
	{
		{1,0,0},
		{0,2,0},
		{0,0,3}

	};
	CvMat va=cvMat(3,3, CV_64FC1,a);
	cout<<"目标矩阵1:"<<endl;

	for(int i=0;i<3;i++)
	{
		for (int j = 0; j < 3; j++)
		{
			cout<<cvmGet(&va,i,j);
		}
		cout<<endl;
	}
	double b[3][3]=
	{
		{1,1,1},
		{1,1,1},
		{1,1,1}
	};
	CvMat vb=cvMat(3,3,CV_64FC1,b);
	cout<<"目标矩阵2:"<<endl;
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			cout<<cvmGet(&vb,i,j);
		}
		cout<<endl;
	}
	double c[3][3]=
	{
		{0,0,0},
		{0,0,0},
		{0,0,0}
	};
	CvMat vc=cvMat(3,3,CV_64FC1,c);
	cvGEMM(//矩阵的广义乘法运算
		&va,//输入矩阵
		&vb,//第二个输入矩阵
		1,//1号矩阵的系数
		&vc,//加权矩阵
		4,//第三个矩阵的权值,不知道有什么用
		&vc//结果矩阵
		);
	cout << "结果矩阵:"<< endl;
	for(int i=0;i<3;i++)
	{
		for(int j=0;j<3;j++)
		{
			cout<<cvmGet(&vc,i,j);
		}
		cout << endl;
	}
	getchar();
	return 0;
}</span></span>
代码运行结果:

参考:http://www.tuicool.com/articles/Q3mM3m

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: opencv中的mat::zeros函数是用来创建一个指定大小和类型的全零矩阵的函数。它的语法如下: cv::Mat cv::Mat::zeros(int rows, int cols, int type) 其中,rows和cols分别表示矩阵的行数和列数,type表示矩阵的类型,可以是CV_8UC1、CV_8UC3、CV_32FC1等等。函数返回一个指定大小和类型的全零矩阵。 ### 回答2: opencv中的mat::zeros函数是一个用于创建一个指定大小和类型的矩阵的函数。该函数的原型如下: Mat cv::Mat::zeros(int rows, int cols, int type) 其中,rows表示矩阵的行数,cols表示矩阵的列数,type表示矩阵的数据类型,常用的数据类型包括CV_8U、CV_8S、CV_16U、CV_16S、CV_32S、CV_32F、CV_64F等。该函数返回一个新创建的矩阵,初始化所有元素为0。 使用Mat::zeros函数可以快速创建一个指定大小和类型的矩阵,并且初始化为0,而不用手动遍历矩阵并设置每个元素的值。这在一些图像处理的操作中非常有用,例如在创建掩膜矩阵时,可以使用该函数创建一个大小和图像一样的全零矩阵,然后在需要的位置设置为1或其他值。 下面是一个示例代码,使用mat::zeros函数创建了一张大小为512x512,类型为CV_8UC1的全零图像: Mat img = Mat::zeros(512, 512, CV_8UC1); 需要注意的是,mat::zeros函数创建的矩阵所有元素的值都是0,而不是默认值。如果需要创建一个矩阵并且初始化为其它默认值,可以使用其重载函数,例如: Mat img = Mat::zeros(512, 512, CV_8UC3); Mat img2 = Mat::zeros(Size(512, 512), CV_8UC3); Mat img3 = Mat::zeros(img.size(), img.type()); 其中,img2使用了Size类型来指定矩阵的大小,img3则使用现有的矩阵来指定矩阵的大小和类型。 ### 回答3: opencv中的mat::zeros函数是用于创建一个具有指定行数、列数和类型的矩阵,并将所有像素的值设置为0的函数。这个函数可以创建单通道或多通道的矩阵,可以是8位、16位、32位或64位浮点型,也可以是8位、16位或32位整数型。该函数返回一个与所创建矩阵相同类型的空矩阵。 该函数有两种格式,第一种格式是: Mat dst = Mat::zeros(int rows, int cols, int type); 参数说明: rows:矩阵的行数; cols:矩阵的列数; type:矩阵的类型,包括如下几种: CV_8U:8位无符号整数型; CV_8S:8位有符号整数型; CV_16U:16位无符号整数型; CV_16S:16位有符号整数型; CV_32S:32位有符号整数型; CV_32F:32位浮点型; CV_64F:64位浮点型。 第二种格式是: void cv::Mat::zeros(InputArray _src, Scalar value=Scalar::all(0)) 参数说明: _src:矩阵,用于接收零矩阵; value:可选的参数,用于设置矩阵像素的值,默认值为Scalar::all(0),即所有像素设置为0。 总之,mat::zeros函数是一种非常方便的创建空矩阵并初始化像素值的方法。它可以用于图像处理、计算机视觉、机器学习等众多领域。在许多opencv应用中,需要先创建一个空矩阵,并将其作为输出参数传递给其他函数。因此,mat::zeros函数可以简化代码,提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫与橙子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值