《学习opencv》笔记——矩阵和图像处理——cvGEMM,cvGetCol,cvGetCols and cvGetDiag
矩阵和图像操作
(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;
}
输出结果
(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;
}
输出结果
(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;
}
输出结果
(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;
}
输出结果
to be continued
版权声明:本文博客原创文章,博客,未经同意,不得转载。
《学习opencv》笔记——矩阵和图像处理——cvGEMM,cvGetCol,cvGetCols and cvGetDiag的更多相关文章
- 《学习opencv》笔记——矩阵和图像处理——cvMinManLoc,cvMul,cvNot,cvNorm and cvNormalize
矩阵和图像的操作 (1)cvMinManLoc函数 其结构 void cvMinMaxLoc(//取出矩阵中最大最小值 const CvArr* arr,//目标矩阵 double* min_val, ...
- 《学习opencv》笔记——矩阵和图像处理——cvMax,cvMaxS,cvMerge,cvMin and cvMinS
矩阵和图像操作 (1)cvMax函数 其结构 void cvMax(//比較两个图像取最大值 const CvArr* src1,//图像1 const CvArr* src2,//图像2 CvArr ...
- 《学习opencv》笔记——矩阵和图像处理——cvAnd、cvAndS、cvAvg and cvAvgSdv
矩阵和图像的操作 (1)cvAnd函数 其结构 void cvAnd( //将src1和src2按像素点取"位与运算" const CvArr* src1,//第一个矩阵 cons ...
- 《学习opencv》笔记——基本数据结构,CvMat,矩阵訪问
老板让让做一个东东.输入端要用到opencv顺便就来学习一下.买了本书<学习opencv>翻来一看,opencv1.0,去官网上一看.opencv2.49,瞬间有种蛋碎的赶脚.看着 ...
- 基于OpenCv的人脸检测、识别系统学习制作笔记之一
基于OpenCv从视频文件到摄像头的人脸检测 在OpenCv中读取视频文件和读取摄像头的的视频流然后在放在一个窗口中显示结果其实是类似的一个实现过程. 先创建一个指向CvCapture结构的指针 Cv ...
- opencv笔记4:模板运算和常见滤波操作
time:2015年10月04日 星期日 00时00分27秒 # opencv笔记4:模板运算和常见滤波操作 这一篇主要是学习模板运算,了解各种模板运算的运算过程和分类,理论方面主要参考<图像工 ...
- opencv笔记6:角点检测
time:2015年10月09日 星期五 23时11分58秒 # opencv笔记6:角点检测 update:从角点检测,学习图像的特征,这是后续图像跟踪.图像匹配的基础. 角点检测是什么鬼?前面一篇 ...
- opencv笔记5:频域和空域的一点理解
time:2015年10月06日 星期二 12时14分51秒 # opencv笔记5:频域和空域的一点理解 空间域和频率域 傅立叶变换是f(t)乘以正弦项的展开,正弦项的频率由u(其实是miu)的值决 ...
- 学习opencv中文版教程——第二章
学习opencv中文版教程——第二章 所有案例,跑起来~~~然而并没有都跑起来...我只把我能跑的都尽量跑了,毕竟看书还是很生硬,能运行能出结果,才比较好. 越着急,心越慌,越是着急,越要慢,越是陌生 ...
随机推荐
- SWT中Display和Shell是个什么东东
Display:与操作系统沟通的桥梁 我们在前面说过,每个swt程序在最开始都必须创建一个Display对象.Display对象起什么作用呢?它是swt与操作系统沟通的一座桥梁.它负责swt和操作系统 ...
- java枚举的使用
定义枚举 public enum YesOrNo { YES("是") , NO("否") ; private String text ; private in ...
- 【前端攻略】:玩转图片Base64编码(转)
引言 图片处理在前端工作中可谓占据了很重要的一壁江山.而图片的Base64编码可能相对一些人而言比较陌生,本文不是从纯技术的角度去讨论图片的base64编码.标题略大,不过只是希望通过一些浅显的论述, ...
- Linux查看连接数,并发数
Linux查看连接数,并发数 博客分类: 小记 linux 软连接 ln -s /home/ictfmcg/data/photo /var/jtnd/data/photo tomcat 6的Conn ...
- J2SE基础:4.面向对象的特性一
面向对象的特性 封装 继承多态 封装: 定义: 通过对象的封装,实现了模块化和信息隐藏. 通过对类的成员施以一定的訪问权限,实现了类中成员 的信息隐藏 注意点: 对象自已该做的一些事情与方法不能交与其 ...
- swift 笔记 (十八) —— 扩展
扩展 扩展能够让我们给一个已有的类.结构体.枚举等类型加入�新功能,包含属性和方法,甚至是构造器,下标,支持协议等等... 甚至是我们拿不到源码的类.结构体.枚举,我们依旧能够给它加扩展... 看到这 ...
- hibernate操作数据库总结
这篇文章用于总结hibernate操作数据库的各种方法 一.query方式 1.hibernate使用原生态的sql语句执行数据库查询 有些时候有些开发人员总觉得用hql语句不踏实,程序出现了错误,就 ...
- Apache介绍
怎样使用Apache许可证 若用户须要应用Apache许可证,请将下面演示样例使用适当的注视方法包括在作品源文件里,将括号"[]"中的字段以用户自身的区分信息来替换 ...
- InputStreamReader 和 OutputStreamWriter类使用方法简单介绍,及演示。
InputStreamReader 和 OutputStreamWriter类使用方法简单介绍. 一.InputStreamReader类 InputStreamReader 将字节流转换为字符流.是 ...
- IOS设计模式学习(21)享元
1 前言 在面向对象软件设计中,利用公共对象不仅能节省资源还能提高性能.共享的对象只能提供某些内在的信息,而不能用来识别对象.专门用于设计可共享对象的一种设计模式叫做享元模式(Flyweight pa ...