《学习opencv》笔记——矩阵和图像处理——cvGEMM,cvGetCol,cvGetCols and cvGetDiag

《学习opencv》笔记——矩阵和图像处理——cvGEMM,cvGetCol,cvGetCols and cvGetDiag

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

矩阵和图像操作


(1)cvGEMM函数

其结构


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

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

CV_GEMM_A_T
转置 src1
CV_GEMM_B_T
转置 src2
CV_GEMM_C_T
转置 src3


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


实例代码


#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <iostream>
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++)
			printf("%f\t",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++)
			printf("%f\t",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,&vc,1,&vc);

	cout << "结果矩阵:"<< endl;
	for(int i=0;i<3;i++)
	{
		for(int j=0;j<3;j++)
		printf("%f\t",cvmGet(&vc,i,j));
		cout << endl;
	}
	getchar();
	return 0;
}

输出结果


《学习opencv》笔记——矩阵和图像处理——cvGEMM,cvGetCol,cvGetCols and cvGetDiag


(2)cvGetCol函数

其结构


CvMat* cvGetCol(//取出矩阵中的一列
	  const CvArr* arr,//目标矩阵
	  CvMat* submat,//矩阵指针
	  int col//所要取的列的索引数
);


实例代码


#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <iostream>
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<<"目标矩阵:"<<endl;

	for(int i=0;i<3;i++)
	{
		for(int j=0;j<3;j++)
			printf("%f\t",cvmGet(&va,i,j));
		cout << endl;
	}



	CvMat vb =cvMat(3,3, CV_64FC1);

	CvMat vc =cvMat(3,1, CV_64FC1); 

	vc = *(cvGetCol(&va,&vb,1));

	cout << "所要取的列为:"<< endl;
	for(int i=0;i<3;i++)
	{
		printf("%f\t",cvmGet(&vc,i,0));
		cout << endl;
	}
	getchar();
	return 0;
}

输出结果


《学习opencv》笔记——矩阵和图像处理——cvGEMM,cvGetCol,cvGetCols and cvGetDiag

(3)cvGetCols函数

其结构


CvMat* cvGetCols(//取出矩阵中的一些列
	const CvArr* arr,//目标矩阵
	CvMat* submat,//矩阵指针
	int start_col,//開始列。包括
	int end_col//结束列。不包括
);

实例代码


#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <iostream>
using namespace std;


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

	CvMat va=cvMat(5,5, CV_64FC1,a);

	cout<<"目标矩阵:"<<endl;

	for(int i=0;i<5;i++)
	{
		for(int j=0;j<5;j++)
			printf("%f\t",cvmGet(&va,i,j));
		cout << endl;
	}



	CvMat vb =cvMat(5,5, CV_64FC1);

	CvMat vc =cvMat(5,5, CV_64FC1); 

	vc = *(cvGetCols(&va,&vb,0,3));

	cout << "所要取的列为:"<< endl;
	for(int i=0;i<vc.rows;i++)
	{
		for(int j=0;j<vc.cols;j++)
		printf("%f\t",cvmGet(&vc,i,j));
		cout << endl;
	}
	getchar();
	return 0;
}

输出结果


《学习opencv》笔记——矩阵和图像处理——cvGEMM,cvGetCol,cvGetCols and cvGetDiag


(4)cvGetDiag函数

其结构


CvMat* cvGetDiag(//取出矩阵的特定对角线
	const CvArr* arr,//目标矩阵
	CvMat* submat,//矩阵指针
	int diag = 0//控制标量,0为主对角,1或-1为0相邻对角。以此类推。

);

实例代码


#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <iostream>
using namespace std;


int main() 
{ 
	double a[5][5] = 
	{    
		{1,0,0,0,6},
		{0,2,0,7,0},
		{0,0,3,0,0},
		{0,9,0,4,0},
		{8,0,0,0,5}
	};

	CvMat va=cvMat(5,5, CV_64FC1,a);

	cout<<"目标矩阵:"<<endl;

	for(int i=0;i<5;i++)
	{
		for(int j=0;j<5;j++)
			printf("%f\t",cvmGet(&va,i,j));
		cout << endl;
	}



	CvMat vb =cvMat(5,5, CV_64FC1);

	CvMat vc =cvMat(5,5, CV_64FC1); 

	vc = *(cvGetDiag(&va,&vb,0));

	cout << "所要取的对角线为:"<< endl;
	for(int i=0;i<vc.rows;i++)
	{
		for(int j=0;j<vc.cols;j++)
		printf("%f\t",cvmGet(&vc,i,j));
		cout << endl;
	}
	getchar();
	return 0;
}

输出结果


《学习opencv》笔记——矩阵和图像处理——cvGEMM,cvGetCol,cvGetCols and cvGetDiag


to be continued


版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117505.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用bat命令得到文件名列表「建议收藏」

    使用bat命令得到文件名列表「建议收藏」一个文件夹下面有多个excle文件,快速得到文件名列表步骤如下:step1:在文件夹目录下新建一个txt类型的文件step2:在txt文件中写入如下代码,并保存。DIR*.*/B>LIST.TXTstep3:将txt文件改成.bat后缀,双击运行即可得到list.txt。

    2022年9月16日
    1
  • jQuery 教程

    jQuery 教程菜鸟教程—jQuery教程:https://www.runoob.com/jquery/jquery-tutorial.htmljQuery是一个JavaScript库。jQuery极大地简化了JavaScript编程。jQuery简介什么是jQuery?jQuery是一个JavaScript函数库。jQuery是一个轻量级的”写的少,做的多”的JavaScript库。jQuery库包含以下功能:HTML…

    2022年5月29日
    33
  • RGBA(0,0,0,0)调色

    RGBA(0,0,0,0)调色

    2021年10月28日
    157
  • navicat永久激活码最新[最新免费获取]

    (navicat永久激活码最新)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsaWNlbnNlSW…

    2022年3月26日
    292
  • 工作流引擎 Activiti 万字详细入门

    工作流引擎 Activiti 万字详细入门Activiti7一、工作流介绍1.1概念工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。1.2工作流系统一个软件系统中具有工作流的功能,我们把它称为工作流系统,一个系统中工作流的功能是什么?就是对系统的业务流程进行自动化管理,所以工作流是建立在业务流程的基础上,所以一个软件的系统核心根本上还是系统的业务流程,工作流只是协助进行业务流

    2022年7月11日
    22
  • 基于单片机的毕业设计简单点的_毕业设计设计思路范文

    基于单片机的毕业设计简单点的_毕业设计设计思路范文单片机毕业设计不用愁!!30篇单片机毕业设计参考案例30篇单片机毕业设计参考案例 这篇文章分享给大四的小伙伴,是时候该准备毕业设计了吧,别偷懒了,第二学期就准备实习了喔,所以小编我就开始为你们准备资料啦,30篇单片机毕业设计参考案例给你们啦,有什么不懂的问题可以加群讨论:813238832。下面就是案例: 更多单片机、物联网,MTK和proteus等资料分享,持续增加中,敬请关…

    2022年10月4日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号