顯式建立Mat物件的7種方法

2021-10-25 17:56:08 字數 2910 閱讀 8274

由於博主最近在學習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...