矩阵和图像操作

(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的更多相关文章

  1. 《学习opencv》笔记——矩阵和图像处理——cvMinManLoc,cvMul,cvNot,cvNorm and cvNormalize

    矩阵和图像的操作 (1)cvMinManLoc函数 其结构 void cvMinMaxLoc(//取出矩阵中最大最小值 const CvArr* arr,//目标矩阵 double* min_val, ...

  2. 《学习opencv》笔记——矩阵和图像处理——cvMax,cvMaxS,cvMerge,cvMin and cvMinS

    矩阵和图像操作 (1)cvMax函数 其结构 void cvMax(//比較两个图像取最大值 const CvArr* src1,//图像1 const CvArr* src2,//图像2 CvArr ...

  3. 《学习opencv》笔记——矩阵和图像处理——cvAnd、cvAndS、cvAvg and cvAvgSdv

    矩阵和图像的操作 (1)cvAnd函数 其结构 void cvAnd( //将src1和src2按像素点取"位与运算" const CvArr* src1,//第一个矩阵 cons ...

  4. 《学习opencv》笔记——基本数据结构,CvMat,矩阵訪问

        老板让让做一个东东.输入端要用到opencv顺便就来学习一下.买了本书<学习opencv>翻来一看,opencv1.0,去官网上一看.opencv2.49,瞬间有种蛋碎的赶脚.看着 ...

  5. 基于OpenCv的人脸检测、识别系统学习制作笔记之一

    基于OpenCv从视频文件到摄像头的人脸检测 在OpenCv中读取视频文件和读取摄像头的的视频流然后在放在一个窗口中显示结果其实是类似的一个实现过程. 先创建一个指向CvCapture结构的指针 Cv ...

  6. opencv笔记4:模板运算和常见滤波操作

    time:2015年10月04日 星期日 00时00分27秒 # opencv笔记4:模板运算和常见滤波操作 这一篇主要是学习模板运算,了解各种模板运算的运算过程和分类,理论方面主要参考<图像工 ...

  7. opencv笔记6:角点检测

    time:2015年10月09日 星期五 23时11分58秒 # opencv笔记6:角点检测 update:从角点检测,学习图像的特征,这是后续图像跟踪.图像匹配的基础. 角点检测是什么鬼?前面一篇 ...

  8. opencv笔记5:频域和空域的一点理解

    time:2015年10月06日 星期二 12时14分51秒 # opencv笔记5:频域和空域的一点理解 空间域和频率域 傅立叶变换是f(t)乘以正弦项的展开,正弦项的频率由u(其实是miu)的值决 ...

  9. 学习opencv中文版教程——第二章

    学习opencv中文版教程——第二章 所有案例,跑起来~~~然而并没有都跑起来...我只把我能跑的都尽量跑了,毕竟看书还是很生硬,能运行能出结果,才比较好. 越着急,心越慌,越是着急,越要慢,越是陌生 ...

随机推荐

  1. 【cocos2d-x不要在生产白片步骤】第二项:制作Block分类

    由于游戏非常多使用阻断,因此,我们创建了一个单独的类中Block. 于Blcok.h声明了两个初始化函数: static Block* createWithArgs(Color3B color, Si ...

  2. 数字证书及CA的扫盲介绍(转)

    ★ 先说一个通俗的例子 考虑到证书体系的相关知识比较枯燥.晦涩.俺先拿一个通俗的例子来说事儿. ◇ 普通的介绍信 想必大伙儿都听说过介绍信的例子吧?假设 A 公司的张三先生要到 B 公司去拜访,但是 ...

  3. SWT的TreeViewer和TableViewer的交互

    左边是一个TreeViewer,右边是一个TableViewer.当点击左边的treeitem的时候,右边的tableViewer要将该item的子节点信息显示出来.就像这样: 左边的treeView ...

  4. C#区域截图——调用API截图

    原文:C#区域截图——调用API截图 前言:截图对于一个C++开发者来说无非是小菜一碟,也有朋友使用C#的 Graphics.CopyFromScreen 方法屏幕操作,作为一名整天想着用 C++ 开 ...

  5. Web监听器导图详解(转)

    阅读目录 Web监听器 监听器的分类 Servlet版本与Tomcat版本 getAttribute与getParameter的区别 参考 监听器是JAVA Web开发中很重要的内容,其中涉及到的知识 ...

  6. [Oracle] 接线表

    于OLTP制,嵌套连接占70%左右,哈希联接占20%,合并排序连接帐户10%. 嵌套连接 算法:嵌套连接从两个表分选出小表为驱动表,大表为被驱动表.先訪问驱动表(仅仅訪问1次).然后依据驱动表返回的行 ...

  7. Android 解决Gallery下ScrollView滑动事件冲突

    在Gallery下,里面内容过长超出屏幕,这时我们可以用ScrollView来滚动,但是这样做了以后,会发现一个问题,Gallery的滑动事件和ScrollView的滑动事件起冲突,这时我们可以自定义 ...

  8. live555 for Android

    因为Live555 包中未提供Android 的config 所以编译器来比較麻烦,须要自己编写Android.mk ,下面是我通过 改动 现有的config文件,在cygwin实现 编译的过程,co ...

  9. hdu 4464 水

    http://acm.hdu.edu.cn/showproblem.php?pid=4464 现场赛总会有水题,这就是最水的一道,预计也就是能当高校的上机题,保研用,呵呵~~~ #include &l ...

  10. KVC该机制

    KVC该机制 KVC是cocoa的大招,用来间接获取或者改动对象属性的方式. 一.KVC的作用: KVC大招之中的一个: [self setValuesForKeysWithDictionary:di ...