opencv Mat型別初始化,遍歷,賦值

2021-08-29 03:03:29 字數 1062 閱讀 8728

1.opencv mat型別定義

cv::mat a(cv::size(w,h),cv_8uc1); // 單通道

cv::mat b = cv::mat(cv::size(w,h),cv_8uc3); //3通道每個矩陣元素包含3個uchar值

對於維數較小的mat型別,直接定義賦值方法如下:

mat mtest = (mat_(4, 1) << -0.055818, -0.734866, -0.675912, 0.506045);

2.定義特殊矩陣

cv::mat mz = cv::mat::zeros(cv::size(w,h),cv_8uc1); // 全零矩陣

【或者:mat tmpdata = mat::zeros(h, w, cv_8uc1);//h行w列的全0矩陣】

cv::mat mo = cv::mat::ones(cv::size(w,h),cv_8uc1);  // 全1矩陣

【或者:mat tmpdata = mat::ones(h, w, cv_8uc1);//h行w列的全1矩陣】

cv::mat me = cv::mat::eye(cv::size(w,h),cv_32fc1);  // 對角線為1的對角矩陣

【或者:mat tmpdata = mat::eye(h, w, cv_32fc1);//h行w列的對角矩陣】

3.mat型別遍歷與賦值

1)拷貝賦值

深層拷貝:mat a=imread("x.jpg"); mat b=a.clone();b是開闢了新的記憶體完全的複製了a的內容,操作b不會對a造成影響。

2)將資料型別為u16的datau16賦值給資料型別為u8的datau8(資料型別轉換).

mat datau16 = mat(size(w, h), cv_16uc1);

mat datau8 = mat(size(w, h), cv_8uc1);

u16* pxvecu16 = datau16.ptr(0);

u8* pxvecu8 = datau8.ptr(0);

for (int i = 0; i < datau16.rows; i++)

}

型別初始化

最近兩天在看 net 本質論 其中提到了一型別初始化中比較關鍵的兩個方法 型別初始化器 cctor 和建構函式 ctor 建構函式不用多說,上學時就知道,但是型別初始化器我是剛剛知道,它是乙個無返回值 無引數 靜態的函式,在型別首次被載入時呼叫,接下來來看個例子 class class1 ctor ...

static 型別初始化

在初始化時,先初始化static型別變數,再初始化普通變數,再初始化建構函式。如下程式 class a void f int i class b void f2 int i static a a2 new a 2 class c void f3 int i static a a5 new a 5 p...

初始化 指定初始化

id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...