一:CvMat* cvInitMatHeader( CvMat* mat, int rows, int cols, int type,void* data=NULL, int step=CV_AUTOSTEP );

mat  指针指向要被初始化的矩阵头.

rows  矩阵的行数.

cols 矩阵的列数.

type 矩阵元素类型.

data 可选的,将指向数据指针分配给矩阵头.

step 排列后的数据的整个行宽。默认状态下。使用 STEP 的最小可能值。比如假定矩阵的行与行之间无隙

double a[] = { 1, 2, 3, 4

5, 6, 7, 8,

9, 10, 11, 12 };

double b[] = { 1, 5, 9,

2, 6, 10,

3, 7, 11,

4, 8, 12 };

double c[9];// c 数组存贮 a(3x4) 和 b(4x3) 矩阵的积

CvMat Ma, Mb, Mc ;

cvInitMatHeader( &Ma, 3, 4, CV_64FC1, a );//创建矩阵,按行存储的

cvInitMatHeader( &Mb, 4, 3, CV_64FC1, b );

cvInitMatHeader( &Mc, 3, 3, CV_64FC1, c );

cvMatMulAdd( &Ma, &Mb, 0, &Mc );

cvReleaseMat(&Ma);

cvReleaseMat(&Mb);

cvReleaseMat(&Mc);

还有一种初始化矩阵:

double a[] = { 1,   2,   3,   4,

5,   6,   7,   8,

9, 10, 11, 12 };

CvMat Ma=cvMat(3, 4, CV_64FC1, a);

二:

cvMat存储矩阵的方法

cvGetRealND();返回单通道数组的指定元素

double cvGetReal1D( const CvArr* arr, int idx0 );

double cvGetReal2D( const CvArr* arr, int idx0, int idx1 );

double cvGetReal3D( const CvArr* arr, int idx0, int idx1, int idx2 );

double cvGetRealND( const CvArr* arr, int* idx );

arr

输入数组,必须是单通道.

idx0

元素下标的第一个成员,以 0 为基准

idx1

元素下标的第二个成员。以 0 为基准

idx2

元素下标的第三个成员。以 0 为基准

idx

元素下标数组

返回特殊的数组元素

cvSetRealND();//改动指定数组元素值

void cvSetReal1D( CvArr* arr, int idx0, double value );

void cvSetReal2D( CvArr* arr, int idx0, int idx1, double value );

void cvSetReal3D( CvArr* arr, int idx0, int idx1, int idx2, double value );

void cvSetRealND( CvArr* arr, int* idx, double value );

arr

输入数组.

idx0

元素下标的第一个成员。以 0 为基点

idx1

元素下标的第二个成员。以 0 为基点

idx2

元素下标的第三个成员,以 0 为基点

idx

元素下标数组

value

指派的值

cvGetND();//返回特殊的数组元素 多通道的

CvScalar cvGet1D( const CvArr* arr, int idx0 );

CvScalar cvGet2D( const CvArr* arr, int idx0, int idx1 );

CvScalar cvGet3D( const CvArr* arr, int idx0, int idx1, int idx2 );

CvScalar cvGetND( const CvArr* arr, int* idx );

arr

输入数组.

idx0

元素下标第一个以 0 为基准的成员

idx1

元素下标第二个以 0 为基准的成员

idx2

元素下标第三个以 0 为基准的成员

idx

元素下标数组

cvSetND();//改动指定的数组?多通道的

void cvSet1D( CvArr* arr, int idx0, CvScalar value );

void cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value );

void cvSet3D( CvArr* arr, int idx0, int idx1, int idx2, CvScalar value );

void cvSetND( CvArr* arr, int* idx, CvScalar value );

arr

输入数组

idx0

元素下标的第一个成员,以 0 为基点

idx1

元素下标的第二个成员,以 0 为基点

idx2

元素下标的第三个成员,以 0 为基点

idx

元素下标数组

value

指派的值

voidcvmSet( CvMat* mat, int row, int col, double value );//设置单通道浮点矩阵的指定元素

mat

矩阵.

row

行下标,以 0 为基点.

col

列下标,以 0 为基点.

value

矩阵元素的新值

doublecvmGet( const CvMat* mat, int row, int col );//返回单通道浮点矩阵指定元素

mat

输入矩阵.

row

行下标。以 0 为基点.

col

列下标,以 0 为基点

#include "cv.h"  

#include "highgui.h"  

#include <stdio.h> 

#include <math.h>  

#include <string.h>





#pragma comment(lib, "cv.lib")  

#pragma comment(lib, "cxcore.lib")  

#pragma comment(lib, "highgui.lib")  





main()

{  

CvMat Ma;

CvMat Mb;

CvMat *Mc;

int i,j;

double a[] = { 1,    2,    3,    4};

double b[] = { 1,    2,    3,    4 };

double c[]={0};

Mc=cvCreateMat(2,2,CV_64FC1);

  Ma=cvMat(2, 2, CV_64FC1, a);  

  Mb=cvMat(2, 2, CV_64FC1, b); 

  //cvTranspose(&Ma, Mc);//Ma的转置存储在Mc中,不能对自己进行转置

  cvMatMul(&Ma, &Mb, Mc);

  cvmSet(Mc,1,1,3);//设置2行2列的值为3

//cvInitMatHeader(&Ma, 3, 4, CV_64FC1, a,CV_AUTOSTEP);

for(i=0;i<2;i++)

for(j=0;j<2;j++)

printf("%f ",cvGetReal2D(Mc,i,j));

//printf("%f ",cvGet2D(Mc,i,j));

}

CvMat 矩阵的使用方法和简单程序的更多相关文章

  1. 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...

  2. windbg 基础命令实战 - 简单程序破解

    以前玩游戏遇到一些实在过不去的管卡,经常会找一些游戏修改软件来修改游戏,让自己变得无比强大,将boss一路砍瓜切菜过足游戏瘾.其实游戏修改软件的功能大多都比较简单,我们可以通过windbg的一些简单命 ...

  3. 报表引擎API开发入门—简单程序数据集

    小编最近接的项目是有关报表开发的,很想把这部分知识分享出来.希望大家能够支持我!不多说,马上进入我们今天的话题. API基本知识 小编最近项目所做的是关于一个报表软件—FineReport报表开发的一 ...

  4. ListView与.FindControl()方法的简单练习 #2 -- ItemUpdting事件中抓取「修改后」的值

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/06/24/listview_itemupdating_findcontrol_201 ...

  5. c++学习笔记2(c++简单程序)

    c++的简单程序 练习一: #include <iostream>int main(){std::cout<<"你好c++\n";int x;std::ci ...

  6. [ 转载 ] Java基础10--关于Object类下所有方法的简单解析

    关于Object类下所有方法的简单解析 类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直 ...

  7. Tornado 安装及简单程序示例

    1.安装步骤:tar xvzf tornado-3.2.tar.gz cd tornado-3.2 python setup.py build sudo python setup.py install ...

  8. 使用Nginx+uWSGI+Django方法部署Django程序(上)

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...

  9. IDA 调试 Android 方法及简单的脱壳实现

    IDA 调试 Android 方法及简单的脱壳实现 标签: android原创逆向调试dalvik 2016-05-24 14:24 9286人阅读 评论(3) 收藏 举报 分类: 原创(25) An ...

随机推荐

  1. 入门级:怎么使用C#进行套接字编程(二)

    入门级:怎么使用C#进行套接字编程(一) 原文地址如下: C# Server Socket program C# Client Socket program 代码环境:VS2010+Win8.1企业评 ...

  2. centos7 安装 notejs

    1.安装集成工具 yum -y install gcc make gcc-c++ 2.安装notejs 自行选择版本:https://nodejs.org/dist/ wget https://nod ...

  3. Dynamic CRM 2013学习笔记(五)禁止修改、删除审批通过后的单据

    审批通过后的单据,一般要对其进行控制,不能修改,不能添加,删除等,下面分别介绍下如何实现: 一. 禁止修改: 1. 主表控制,如果页面上审批状态为审批中或审批通过,就把整个页面都disable掉 1: ...

  4. AutoMapper中的Map和DynamicMap——高手注重细节,思考和总结

    近日在做项目的时候,遇到了个怪问题,关于AutoMapper的细节问题,也是不为一般人所关注的. 本人研究AutoMapper也没有多长时间,而且研究的过程中也写了关于AutoMapper的系列基础教 ...

  5. mongo(五)副本集

    mongo(五)副本集 配置文件 1-3为三个存储节点,其实一个为Primary,两个secondary作为备份,4为仲裁节点 # mongod.conf #where to log logpath= ...

  6. Shell 判断

    1  shell 的$! ,$?, $$,$@ $n        $1 the first parameter,$2 the second... $#        The number of co ...

  7. nodeJs开发app.js解析

    在 node.js 中模块分为核心模块和文件模块两种,核心模块是通过 require('xxxx') 导入的,文件模块是以 require('/xxxx') 或 require('./xxxx').r ...

  8. paip.网页右键复制菜单限制解除解决方案

    paip.网页右键复制菜单限制解除解决方案 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net ...

  9. Leetcode 205 Isomorphic Strings 字符串处理

    判断两个字符串是否同构 hs,ht就是每个字符出现的顺序 "egg" 与"add"的数字都是122 "foo"是122, 而"ba ...

  10. Symbols of String Pattern Matching

    Symbols of String Pattern Matching in Introduction to Algorithms. As it's important to be clear when ...