opencv Mat 基本運算

2021-06-27 16:49:40 字數 1941 閱讀 8492

mat 是為了與matlab矩陣運算對應而新加的opencv 類,有一些基本的操作,在下邊的**中列出,**的資源見

//注意mat的行列號是從0開始的

//定義矩陣a,b,c

mat a,b,c;

//生成三行四列的全一矩陣 cv_64f表示精度

a=mat::ones(3,4,cv_64f);

//a=mat::zeros(3,4,cv_64f);為生成全0

//把矩陣a複製給矩陣b 注意不能用b=a

b=a.clone();

//矩陣a每乙個元素乘以2

a=a.mul(2);

//矩陣b每乙個元素乘以4

b=b.mul(4);

//矩陣a點乘矩陣b

//常用的矩陣運算

mat d,e,f,g;

//帶權重的矩陣加法 d=a*1+b*1+4,4為常數,1,1,4均可以改變值

addweighted(a,1,b,1,4,d);

//矩陣a除以a,結果為e

divide(d,a,e);

//常數6除以矩陣e中的每乙個元素,結果為f

divide(6,e,f);

//常數2加矩陣f的每乙個元素,結果為g,其中2可以為矩陣

add(2,f,g);

cout<

//iplimage轉為mat

iplimage *pimg=cvloadimage("2.bmp",1);

mat mat(pimg);

//若iplimage為3通道,則此時mat也為三通道,可以將3通道轉為單通道

//對矩陣的區域性進行賦值改變

mat onesmat=mat::ones(3,6,cv_64f);

//用常數初始化矩陣

onesmat.setto(4);

//矩陣onesmat乘以2後賦值給matcount

mat matcount=onesmat.mul(2);

//拷貝一整行元素

onesmat.row(1).copyto(matcount.row(1));

//拷貝一整列元素

onesmat.col(3).copyto(matcount.col(3));

//拷貝某乙個元素

onesmat.row(2).col(5).copyto(matcount.row(2).col(5));

cout<

//訪問矩陣中的元素

for (int i=0;iitercount=matt.begin(); //起始迭代器

matiterator_iterend=matt.end(); //終止迭代器

for (;itercount!=iterend;itercount++)

coutofstream ofs("mat.txt");

if (!ofs)

int ncount=0;

matiterator_itercount1=matt.begin();

matiterator_iterend1=matt.end();

for (;itercount1!=iterend1;itercount1++)

{ ofs<

ncount++;

if (ncount==matt.cols) //對矩陣進行換行

{ ofs<

Opencv Mat元素操作

opencv的mat中元素操作有好幾種方式 opencv中mat是row優先儲存的 mat h 100,100,cv 64f for int i 0 i h.rows i for int j 0 j h.cols j h.at i,j 1.i j 1 2維情況為 在matrix維度比較大時,兩個的訪...

Opencv Mat操作大全

cpp view plain copy include include using namespace std using namespace cv intmain float array1 用陣列初始化mat mat mat mat 1,3,cv 32f,array mat mat1 mat 1,...

Opencv Mat矩陣的一些基本操作和遇過的問題

1 mat矩陣值傳遞的時候,如果在函式內部型別發生改變時候,傳出來的資料會變化,所以需要在函式內部重新複製一塊區域給他,才能傳出想要的mat void getdes mat des void main 2 使用colrange 和rowrange 對矩陣進行擴充 mat commatr mat ma...