OpenCV中Mat與二維陣列之間的轉換

2022-09-14 07:48:13 字數 3390 閱讀 6164

---恢復內容開始---

在opencv中將mat(二維)與二維陣列相對應,即將mat中的每個畫素值賦給乙個二維陣列。

全部**如下:

#include #include 

#include

//包含imread, imshow等識別符號

#include "

opencv2/imgproc/imgproc.hpp"//

包含cvtcolor等

using

namespace

std;

using

namespace

cv;//

測試mat

void

main()

cout

<< "

error

"<

} //進行影象灰度化操作

cvtcolor(mat, mat, cv_bgr2gray);

//獲取

mat 的行和列

int row =mat.rows;

int col =mat.cols;

cout

<< "

mat.rows :

"<< mat.rows <

cout

<< "

mat.cols :

"<< mat.cols <

//動態建立二維陣列,row行col列

int **la = new

int *[row];

for (int i = 0; i < row; i ++)

// 迴圈二維陣列和mat,並將mat對應值賦給二維陣列對應值,

for (int i = 0; i < row; i ++)

} // 釋放分配空間

for (int i = 0; i < row; i ++)

delete

la;cout

<

waitkey(0);

system(

"pause");

}

分析:1. 讀入一幅影象

//

讀入影象

//判斷讀入是否有誤

if(mat.empty())

cout

<< "

error

"<

}

2. 對影象進行灰度化操作,將mat轉為二維。

//

進行影象灰度化操作

cvtcolor(mat, mat, cv_bgr2gray);

3. mat有rows和cols屬性,rows表示對應矩陣行數,cols表示對應矩陣列數:

//

儲存mat的行和列

int row =mat.rows;

int col = mat.cols;

4. mat還具有size () 方法,該方法可以得到width寬度和height高度:

size s =mat.size();

int width =s.width;

int height = s.height;

5. rows,cols,width,height 之間的關係:

cout << "

s.width :

"<< s.width <

cout

<< "

s.height :

"<< s.height <

cout

<< "

mat.rows :

"<< mat.rows <

cout

<< "

mat.cols :

"<< mat.cols << endl;

6. 列印結果:

7. 結論:

由第5步和第6步可得:

mat.size().width =mat.cols;

mat.size().height = mat.rows;

8. 動態建立二維陣列:

例:建立乙個4行3列的二維陣列,如下:

, , , }

即:,,

,

//

建立乙個二維陣列中包含4個一維陣列,即先定義4行

int **array = new

int *[4

];//

迴圈二維陣列,並將二維陣列中的每個元素建立為包含3個元素的一維陣列

//先分配多少行,再每行分配多少列

for (int i = 0; i < 4; i ++)

//迴圈遍歷二維陣列,行作為外迴圈,列作為內迴圈,一行一行地遍歷

for (int i = 0; i < 4; i ++)

cout

<

}//使用完請求分配的數值需要釋放分配空間(記憶體)

//釋放分配空間,一行一行的刪除

for (int i = 0; i < 4; i ++)

delete array;

結果:

9. 使用mat影象的寬度和高度進行動態建立二維陣列,height(row)代表具有多少行,width(col)代表具有多少列。

//

建立乙個二維陣列,height(row)行width(col)列

int **la = new

int *[height];

for (int i = 0; i < height; i ++)

//迴圈將mat中對應的值賦給la二維陣列

for (int i = 0; i < row; i ++)

//cout << endl;}//

釋放分配空間

for (int i = 0; i < height; i ++)

delete la;

10. 建立乙個和二維陣列行列大小的mat:

當知道二維陣列的大小,需要將二維陣列中的值賦給同樣大小的mat,使用mat顯示。

//

建立乙個mat變數 height(row)行width(col)列

mat temp = mat(height, width, cv_8u, scalar::all(0

));

//迴圈賦值

for (int i = 0; i < height; i ++)

}

---恢復內容結束---

二維陣列與二維指標

1.二維陣列的儲存是線性的,可以通過一維指標的方式訪問。如一下 int map 5 5 int mapd map 0 0 則 map i j mapd i 5 j 而利用二維陣列線性儲存的特性,可以將二維陣列當作一維指標方便的在函式之間傳遞 如 將乙個二維陣列賦值給乙個動態二維陣列,引數設定為一維指...

二維陣列與二維指標

一.指標與二維陣列 以martix 3 4 為例 1.二維陣列的本質 int martix 3 4 int martix 3 4 int 4 martix 3 令int 4 為type,type martix 3 為含有三個元素的陣列,每乙個元素型別為int 4 int 4 是乙個擁有4個int型別...

一維陣列與二維陣列

1.一維陣列的定義格式為 型別說明符 陣列名 常量表示式 在定義陣列時,需要指定陣列中元素的個數,方括弧中的常量表示式用來表示元素的個數,即陣列長度。常量表示式中可以包括常量和符號常量,但不能包含變數。c語言不允許對陣列的大小作動態定義,即陣列的大小不依賴於程式執行過程中變數的值。在定義陣列時對陣列...