《学习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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 周立功的《深入浅出ARM7》上_看门狗

    周立功的《深入浅出ARM7》上_看门狗周立功的《深入浅出ARM7》上_看门狗1.看门狗概述看门狗(WD,Watchdog)包括一个4分频的预分频器和一个32位计数器。时钟通过预分频器输入定时器。定时器递减计数。定时器递减的最小值为0x

    2022年7月1日
    24
  • 学习prototypejs中的继承实现机制(一): Object.extend()、Class.create()、Class#addMethods()的使用[通俗易懂]

    学习prototypejs中的继承实现机制(一): Object.extend()、Class.create()、Class#addMethods()的使用[通俗易懂]$super是不是和java中的继承有点像,我们居然可以使用$super来调用父类中的方法。不过有些差别:java中可以使用super调用父类中的任何公开的方法,但是在prototypejs里面$super只是一个方法,不是父对象。我们先研究下,prototypejs是如何做到$super,后面再看我们能不能改造它,让$super更像java中的super关键字。

    2022年7月22日
    11
  • 2021年7月整理–简单方法 暴力激活成功教程WIFI密码

    2021年7月整理–简单方法 暴力激活成功教程WIFI密码2021年7月整理–简单方法暴力激活成功教程WIFI密码很多人都面临过短期租房、短期出差、住院而没有WIFI可用等境遇,有的是宽带太多办不起、有的是临时一阵子不值得折腾、有的是运营商不给扯线等等原因。然后就用手机下载了WIFI智能钥匙等APP,然后发现卵用么有,根本没有人共享自家WIFI密码给你用。以下是按步骤整理的软件和详细教程笔记本电脑+软件暴力激活成功教程出的密码我亲身用这个软件解开N多个密码此软件是家用路由器安全审计工具,切勿用作非法用途!!!….

    2022年10月13日
    0
  • arraylist和linkedlist的区别_arraylist 和linkedlist

    arraylist和linkedlist的区别_arraylist 和linkedlist&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这段时间把疯狂JAVA再看了一遍,发现Stack,ArrayDeque,LinkedList都可以作为栈使用,所以就稍微从性能以及实现的细节对比这三者的区别。类继承树&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由继承树看出,三者都是Collection的间接实现类。&

    2022年9月20日
    0
  • datagrip2022.01 激活码【中文破解版】

    (datagrip2022.01 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年4月1日
    203
  • 验证二叉搜索树 leetcode_二叉树 面试题

    验证二叉搜索树 leetcode_二叉树 面试题重写equal()时为什么也得重写hashCode()之深度解读equal方法与hashCode方法渊源 原创  2016年05月08日 23:14:19 标签:java equal方法重写 /java /重写equals方法和hashCode方 10077 转载请注明出处: http://blog.csdn.net/javazejian/art…

    2022年8月9日
    8

发表回复

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

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