CvMat 矩陣的用法和簡單程式

2021-06-29 05:41:23 字數 3705 閱讀 3763

一: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 = ;

double b = ;

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 = ;

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

指派的值

cvge***();//返回特殊的陣列元素 多通道的

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 cvge***( const cvarr* arr, int* idx );

arr輸入陣列.

idx0

元素下標第乙個以 0 為基準的成員

idx1

元素下標第二個以 0 為基準的成員

idx2

元素下標第三個以 0 為基準的成員

idx元素下標陣列

cvse***();//修改指定的陣列?多通道的

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 cvse***( 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

#include

#include

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

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

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

main()

;double b = ;

double c=;

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

}

fork 函式的簡單程式

include include 注 自定義的標頭檔案 int main int argc,char argv int main int argc,char argv else 執行結束之後,系統1號程序進行 printf c n return 0 int main int argc,char arg...

Linux和Windows系統下簡單程式的編寫

二 windows系統下編寫簡單程式 1 到ubuntu乙個目錄下,然後滑鼠右擊,在此處開啟終端 2 進入root使用者sudo su 3 輸入sudo vim hello.c 建立hello.c檔案 4 進入vim下,從鍵盤輸入i,左下角出現 插入 表示進入編輯狀態 5 輸入 後,按esc推出編輯...

計算24點的簡單程式

近來家庭作業裡有24點的題目,為了找出所有可能的組合,就寫了個簡單的程式 1.執行程式 2.輸入4個整數,比如 3 3 7 8 3.顯示所有可能的組合 include assert.h include double operate double num1,double num2,int op els...