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


相关推荐

  • RXJava原理_JavaScript的执行原理

    RXJava原理_JavaScript的执行原理RXJava简单理解首先,rxjava是什么?其实对于刚接触rxjava的宝宝而言,只需要掌握两点:观察者模式异步处理观察上图,清楚生动刻画出了rxjava的观察者模式:开关(被观察者)作为的是事件的产生方(产生“on”和“off”这两个Event),有它发起这起开关的事件。台灯(观察者)作为事件的处理方(处理的是“on”和“off”这两个事件),被动的执行on和off。

    2022年10月22日
  • 在MFC下面实际演示CCriticalSection 的使用

    在MFC下面实际演示CCriticalSection 的使用Q:CCriticalSection是什么?A:CCriticalSection是一种线程同步策略或者说技术或者方法总之呢就是这么个意思。。。。参考资料:http://blog.csdn.ne

    2022年7月4日
  • 信息收集8——masscan,nbtscan「建议收藏」

    信息收集8——masscan,nbtscan「建议收藏」目录masscannbtscanmasscan大规模地址范围扫描器默认每秒100包,可提升至约25,000,000包每秒 理论_上全球地址范围指定一个端口的打描可在3分钟完成命令格式masscan<ipaddresses/ranges>-pportsoptions地址范围1.1.1.1-1.1.1.10、1.0.0.0/8–exclude排除IP地址段–excludefile排除文件中IP地址端口-p80,20-25 -pU:1

    2022年9月13日
  • PHP数组转换json「建议收藏」

    PHP数组转换json「建议收藏」<?php$arr=array(‘a’=>1,’b’=>2,’c’=>3,’d’=>4,’e’=>5);echojson_encode($arr);?>

    2022年6月21日
  • arduino连接lcd1602_1602显示摄氏度

    arduino连接lcd1602_1602显示摄氏度##Arduinouno连接LCD1602A显示测试温度面包板接线图代码#include<LiquifdCrystal.h>//引入依赖/*初始化针脚*/constintrs=3;constinten=5;constintd4=10;constintd5=11;constintd6=12;constintd7=13;constintlcdlight=9;//调节对比度LiquidCry

    2022年9月14日
  • [6] 算法路 – 双向冒泡排序的Shaker

    [6] 算法路 – 双向冒泡排序的Shaker

    2022年1月7日

发表回复

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

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