《学习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


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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • usart和uart的通信原理「建议收藏」

    usart和uart的通信原理「建议收藏」usart和uart的通信原理一、通信接口介绍1、处理器与外部设备通信的两种方式:并行通信:数据各个位同时传输。(速度快,占用引脚资源多)串行通信:数据按位顺序传输(一位一位传输)。(占用引脚资源少,速度相对较慢)2、串行通信三种传送方式单工:数据传输只支持数据在一个方向上传输半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工…

  • OpenCV 估算图像的投影关系:基础矩阵和RANSAC[通俗易懂]

    OpenCV 估算图像的投影关系:基础矩阵和RANSAC[通俗易懂]OpenCV 估算图像的投影关系:基础矩阵和RANSAC

  • 一分钟学习静态网页制作[通俗易懂]

    一分钟学习静态网页制作[通俗易懂]第一章静态网页制作:什么叫做HTML:超文本标记语言HTML优势:世界知名浏览器都支持Google,苹果,微软,等等……还有市场需求跨平台:1.win系统2.苹果系统3.linux系统w3c标准包涵:1.结构化标准(XHEML,XML)2.表现化标准(CSS)3.行为化标准(DOM,ECMAScript)网页的基本标签:1.标题标签:h1~h…

  • kmo检验和bartlett球形检验_轻松搞懂:球形压力容器如何焊接安装?[通俗易懂]

    kmo检验和bartlett球形检验_轻松搞懂:球形压力容器如何焊接安装?[通俗易懂]球形压力容器简称“球罐”,与其他形式的容器相比,其重量与体积之比最小,受力均匀,可以承受较高的压力,是工业中普遍应用的大容积定容储气罐。在冶金工厂中,球罐常用于贮存氧气、氮气及保护气体等,以供氧气炼钢、富氧鼓风、轧钢热处理炉及煤气置换等生产所需用气。球罐由球体壳板(分赤道带、下温带、下寒带、上温带、上寒带和极顶板)、支柱、操作平台及管件等组成。球罐按其结构型式分为桔瓣式和混合式两种。根据…

  • role &#39;PLUSTRACE&#39; does not exist

    role &#39;PLUSTRACE&#39; does not exist

  • 【从零开始自制CPU之学习篇02】555定时器

    【从零开始自制CPU之学习篇02】555定时器555定时器是一种集成电路芯片,常被用于定时器、脉冲产生器和震荡电路。在CPU制作中作为pc(程序计数器)的主要组成部分。以下是我购买的NE555实拍图:NE555的针脚示意图:555定时器各针脚

发表回复

您的电子邮箱地址不会被公开。

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