學習OPENCV3 1 0 3 Mat物件

2021-10-10 18:59:17 字數 3710 閱讀 3469

1.mat物件建構函式

mat src;
mat dst;

dst =

mat(src.

size()

, src.

type()

);

//畫素100×100的單通道,gray-127顏色

mat m

(100

,100

, cv_8uc1,

scalar

(127))

;//畫素100×100的三通道,rgb為0,0,255的顏色

//事實證明,opencv中對rgb影象資料的儲存順序是bgr,而且scalar()的順序也是b,g,r

mat m

(100

,100

, cv_8uc1,

scalar(0

,0,255))

;

mat dst;

dst =

mat(src.

size()

, src.

type()

);dst =

scalar

(127,0

,255);

//可以像mat (size size,int type,const scalar &s)這樣連起來

dst = mat:

:zeros

(src.

size()

, src.

type()

);//dst的大小,型別和原影象一致

m2 = mat:

:zeros(2

,2,cv_8uc1)

;//構造乙個2×2的單通道影象

//可以類似為矩陣m2=

m2 = mat:

:zeros(2

,2,cv_8uc1)

;//構造乙個2×2的單通道影象

//可以類似為矩陣m2= 注意是單位矩陣

2.常用方法

src.

copyto

(dst)

;//複製src到dst

const uchar* firstrow = dst.ptr(0

);printf

("fist pixel value : %d\n"

,*firstrow)

;

mat a=

imread

(imgfilepath)

;mat b

(a)// 只複製

mat f = a.

clone()

;//或

mat g; a.

copyto

(g);

mat m;

m.create(4

,3, cv_8uc2)

;m =

scalar

(127

,127);

cout <<

"m = "

<< endl <<

" "<< m << endl << endl;

uchar* firstrow = m.ptr(0

);printf

("%d"

,*firstrow)

;

mat c =

(mat_<

double

>(3

,3)<<0,

-1,0

,-1,

5,-1

,0,-

1,0)

;

cout <<

"c = "

<< endl <<

" "<< c << endl << endl;

#include

#include

using namespace std;

using namespace cv;

intmain

(int argc,

char

** ar**)

namedwindow

("input"

, cv_window_autosize)

;imshow

("input"

, src)

;/*mat dst;

dst = mat(src.size(), src.type());

dst = scalar(127, 0, 255);

namedwindow("output", cv_window_autosize);

imshow("output", dst);*/

mat dst;

namedwindow

("output"

, cv_window_autosize)

;cvtcolor

(src, dst, cv_bgr2gray)

;printf

("input image channels : %d\n"

, src.

channels()

);printf

("output image channels : %d\n"

, dst.

channels()

);int cols = dst.cols;

int rows = dst.rows;

printf

("rows : %d cols : %d\n"

, rows, cols)

;const uchar* firstrow = dst.ptr(0

);printf

("fist pixel value : %d\n"

,*firstrow)

; mat m

(100

,100

, cv_8uc1,

scalar

(127))

;//cout << "m =" << endl << m << endl;

mat m1;

m1.create

(src.

size()

, src.

type()

);m1 =

scalar(0

,0,255);

mat csrc;

mat kernel =

(mat_<

char

>(3

,3)<<0,

-1,0

,-1,

5,-1

,0,-

1,0)

;filter2d

(src, csrc,-1

, kernel)

; mat m2 = mat:

:eye(2

,2, cv_8uc1)

; cout <<

"m2 ="

<< endl << m2 << endl;

imshow

("output"

, m2)

;waitkey(0

);return0;

}

OpenCV 學習筆記(一)Mat

opencv是由c語言實現的,實際上它使用的結構體也是遵循物件導向思想設計的,iplimage由cvmat派生 資訊 和乙個指向儲存所有畫素值的矩陣 根據所選儲存方法的不同矩陣可以是不同的維數 的指標。mat矩陣頭 包括 typedef struct cvmat data ifdef cpluspl...

opencv建立Mat物件

在opencv中引入了mat類。mat類是乙個非常優秀的影象類,它同時也是乙個通用的矩陣類,可以用來建立和操作多維矩陣。mat類裡面定義了許多建構函式,可以很方便地根據要求建立mat物件。常使用的建構函式有 1 mat mat 無引數建構函式 2 mat mat int rows,int cols,...

OpenCV中Mat 型別學習筆記

printf img.size 函式返回值 n cout 報錯 原因,mat.step1 0 需要用圓括弧 mat的step,size,step1,elemsize,elemsize1這幾個屬性非常容易混淆。opencv的官方參考手冊也沒有解釋清楚這幾個概念。step1 i 每一維元素的通道數 st...