---恢復內容開始---
在opencv中將mat(二維)與二維陣列相對應,即將mat中的每個畫素值賦給乙個二維陣列。
全部**如下:
#include #include分析:1. 讀入一幅影象#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");
}
//2. 對影象進行灰度化操作,將mat轉為二維。讀入影象
//判斷讀入是否有誤
if(mat.empty())
cout
<< "
error
"<
}
//3. mat有rows和cols屬性,rows表示對應矩陣行數,cols表示對應矩陣列數:進行影象灰度化操作
cvtcolor(mat, mat, cv_bgr2gray);
//4. mat還具有size () 方法,該方法可以得到width寬度和height高度:儲存mat的行和列
int row =mat.rows;
int col = mat.cols;
size s =mat.size();5. rows,cols,width,height 之間的關係:int width =s.width;
int height = s.height;
cout << "6. 列印結果:s.width :
"<< s.width <
cout
<< "
s.height :
"<< s.height <
cout
<< "
mat.rows :
"<< mat.rows <
cout
<< "
mat.cols :
"<< mat.cols << endl;
7. 結論:
由第5步和第6步可得:
mat.size().width =mat.cols;8. 動態建立二維陣列:mat.size().height = mat.rows;
例:建立乙個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)代表具有多少列。
//10. 建立乙個和二維陣列行列大小的mat:建立乙個二維陣列,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;
當知道二維陣列的大小,需要將二維陣列中的值賦給同樣大小的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語言不允許對陣列的大小作動態定義,即陣列的大小不依賴於程式執行過程中變數的值。在定義陣列時對陣列...