CvMat 矩陣的使用方法和簡單程序

一: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, 4ui

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 );spa

cvReleaseMat(&Ma);指針

cvReleaseMat(&Mb);
string

cvReleaseMat(&Mc);
it

還有一種初始化矩陣:io

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

                5,   6,   7,   8,gui

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)); }

相關文章
相關標籤/搜索