由於博主最近在學習opencv,當看到7種建立mat物件的方法時,發現有些方法在新版opencv( vs2017下的opencv 3.4.10 )中不能用,所以就上網查了一下。下邊是我從書中摘抄+修改後的**。
mat不僅是乙個非常有用的影象容器類,同時也是乙個通用的矩陣類,我們也可以用它來建立和操作多維矩陣。
方法一:使用mat()建構函式
mat m;
mat m(2
,2, cv_8uc3,
scalar(0
,0,255))
; cout <<
"m="
<< endl << m << endl << endl;
對於二維通道影象,首先要定義尺寸,即行數和列數。然後,需要指定儲存元素的資料型別以及每個矩陣點的通道數。為此,依據下邊的規則有多種定義:
cv_[the number of bits per item]
[signed or unsigned]
[type prefix]c[the channel number]
即:cv_[位數][帶符號與否][型別字首]c[通道數]
如cv_8uc3表示使用8位unsigned char 型別,每個畫素是由三個元素組成三通道。
結果:
方法二:c/c++中通過建構函式進行初始化
int sz[3]
=;mat l(2
,sz,cv_8uc2,scalar::
all(0)
);
注意l後的括號裡,第乙個數表示維度(dims),但是dims≤2。如果大於2,會報錯
opencv
(3.4
.10) error: assertion failed (m.dims <=
2) in cv::formattedimpl::formattedimpl, file c:\build\3_4_winpack-build-win64-vc14\opencv\modules\core\src\out.cpp, line 86
結果:
方法三:為已存在的iplimage指標建立資訊頭
/*以我讀入一張名為dota_logo.jpg的影象為例*/
;///轉換iplimage*->mat
此方法讀入影象的畫素太多,故不在此做展示。
方法四:利用create()函式
方法五:採用matlab式的初始化方式
方法六:對小矩陣使用逗號分隔式初始化函式
mat c =
(mat_<
double
>(3
,3)<<0,
-1,0
,-1,
5,-1
,0,-
1,0)
; cout <<
"c="
<< endl << c << endl << endl;
方法七:為已存在的物件建立新資訊頭
mat rowclone = m.
row(1)
.clone()
;///此處的m為方法四中建立的m
cout <<
"rowclone="
<< endl << rowclone << endl << endl;
結果:
由於博主是opencv初學者,想必以上方法定是有許多不足之處,敢請各位大佬斧正。
Opencv筆記 顯式建立Mat物件的六種方法
mat不但是乙個非常有用的影象容器類,也是乙個通用的矩陣類,可以用它來建立和操作多維矩陣.建立mat物件有多種方法 使用建構函式 mat int rows,int cols,int type,const scalar s 例 using namespace cv intmain 下面演示了如何建立乙...
建立mat物件的幾種方法
方法一 使用mat 建構函式,這種方法簡單明瞭,可以為影象開闢記憶體,指定初始值等 mat m 4,4,cv 8uc3,scalar 0,0,255 建立三個通道的影象,並為其定義尺寸 及通道的初始值 方法二 通過建構函式進行初始化 int sz 3 mat l 3,sz,cv 8uc1,scala...
4 1 4顯示建立Mat物件的七種方法
1.方法一 使用mat 建構函式 mat m 2,2,cv 8uc3,scalar 0,255,255 cout m endl m endl endl 執行結果 其中各引數解釋 cv 8uc n 表示8位的unsigned char型,每個元素由n個通道組成的n通道,常見1,2,3,4通道。cv 8...