學習筆記 從MATLAB到OpenCV

2021-10-06 17:39:02 字數 2492 閱讀 8384

2. 用到的一些函式

最近需要將matlab中的**轉為c**,主要依靠opencv3.1.0庫實現,於是在此記錄用到的一些操作,主要包括mat和一些函式的使用方法,希望可以方便後邊回顧。

與matlab中變數聯絡最為緊密的就是opencv中的mat型變數了,該變數是「影象的容器」,亦可視為矩陣對待。

using namespace cv		//提前宣告
x =

(mat_<

double

>(3

,3)<<1,

2,3,

4,5,

6,7,

8,9)

;

file* fp;        			

fp =

fopen

("tar.txt"

,"r");

double points[

5000];

//定義足夠大的陣列

int n, k =0;

while(!

feof

(fp)

)fclose

(fp)

;mat tmp =

mat(k/3,

3, cv_64f, points)

;//由points矩陣建立n*3的矩陣tmp,其中n=k/3

tmp.at<

double

>(3

,3)=

1;//需要提前知道矩陣的元素型別,若型別不符會報錯

tmp.

col(0)

.copyto(a

(range(0

, length)

,range(12

,13))

);//tmp的第0列複製到a的第12列

mat b =

a(range:

:all()

,range(1

,3))

;//b是a的第1—2列(a從第0列數起)

tmp=mat:

:zeros(4

,4,cv_64f)

;//建立4*4的全0矩陣tmp,cv_64f指定了資料型別為double

假設a,b都是mat型變數且b已經指向了乙個矩陣,這個矩陣是記憶體中的一片記為c的區域,需要注意的是語句a=b並不會在記憶體中再開闢一塊內容與c一樣的d區域,而是讓a指向c區域,對a或b的操作都會改變c的內容,從而改變a,b的值,這就是有時為什麼要對矩陣進行複製操作的原因。

a.

mul(b)

//相當於matlab中的a.*b

invert

(b, tmp)

;//求b的逆,結果在tmp中

a*tmp;

//沒有matlab中的a/b,用a*b^-1來求

a*b.

inv();

//後來發現的另一種方法

a.t(

); //a的轉置

hconcat

(x, mat:

:ones

(length,

1, cv_64f)

, newx)

;//為矩陣x增加乙個全1列,結果在newx中

x = tmp.

clone()

;//tmp複製給x(記憶體中開闢新的區域)

tmp.

copyto(t

(range:

:all()

,range(1

,3))

);//tmp複製給t的第1-2列

tmp.

copyto

(t.colrange

(range(1

,3))

);//後來發現的另一種方法

svd:

:compute

(a, s, u, v)

;//a=u*s1*v,s是乙個向量,矩陣s1由向量s擴充而來

reduce

(m,sy,

0,cv_reduce_sum,cv_64f)

;//對m按行求和,資料型別為double,結果在sy中

cv:

:sort

(tmp, near,cv_sort_every_row + cv_sort_ascending)

;//對tmp的每行公升序排序,結果放到near中

pcacompute

(x, tmp, vx)

;//求x的主方向,結果在vx中,tmp中為一些相關結果,不需要的話可以忽略

————————————————————

參考文章:

1.2.

3.

Matlab從入門到精通(四)

student.test 99 56 96 87 67 69 87 76 92 student.name wu qing student.weight 68 student.height 1.72 student.num 2003214091 student.add school of civil ...

matlab學習筆記

一致化矩陣 z1 1 2 4 3 4 1 z2 1 2 2 5 6 1 b 0 1 q 3 z concur b,q 向量之和 x1 netsum z1,z2 向量之積 x2 netprod z1,z2 感知器神經網路,完成 或 的計算 err goal 0.001 max epoch 500 x ...

MATLAB學習筆記

1.自由探索之恢復 如果不小心關閉了當前路徑視窗 命令歷史記錄視窗或命令視窗,可以通過選單欄的 desktop 選單中 desktoplayout default 恢復。2.開啟簡單的圖形視窗 在命令視窗中的 後面輸入 funtool 並按回車鍵。3.注釋 命令列中的百分號 起注釋的作用,matla...