六 OpenCV學習筆記 常用函式解析

2021-09-21 14:38:37 字數 4662 閱讀 1624

mat是opencv裡最基本的乙個類,用來表示影象。

// 預設建構函式 mat a;

mat ()

// 常用建構函式 mat a(10,10,8uc3);

mat (int rows, int cols, int type)

//mat a(300, 400, cv_8uc3,scalar(255,255,255));

mat (int ndims, const int *sizes, int type, const scalar &s)

mat (size size, int type)

mat (int rows, int cols, int type, const scalar &s)

mat (size size, int type, const scalar &s)

mat (int ndims, const int *sizes, int type)

mat (const mat &m)

mat (int rows, int cols, int type, void *data, size_t step=auto_step)

mat (size size, int type, void *data, size_t step=auto_step)

mat (int ndims, const int *sizes, int type, void *data, const size_t *steps=0)

mat (const mat &m, const range &rowrange, const range &colrange=range::all())

//mat d (a, rect(10, 10, 100, 100) );

mat (const mat &m, const rect &roi)

mat (const mat &m, const range *ranges)

可以參考以下博文:

1)指標方式

座標的指標:

void colorreduce(const mat& image,mat& outimage,int div)  

for(int i=0;i(i);

uchar* outdata=outimage.ptr(i);

for(int j=0;j資料的指標:

//三通道

uchar *data = image.data ;

for(int h = 0 ; h < image.rows ; ++ h) }

imshow("data" , image) ;

//單通道

}

2)at方式

at方式相當於直接訪問畫素座標:

void colorreduce(mat& image,int div)  

} }

3)迭代器訪問

迭代器就是通過獲得影象矩陣的開始和結束,然後增加迭代直至從開始到結束:

cv::mat tempimage = srcimage.clone();  

// 初始化源影象迭代器

cv::matconstiterator_srciterstart = srcimage.begin();

cv::matconstiterator_srciterend = srcimage.end();

// 初始化輸出影象迭代器

cv::matiterator_resiterstart = tempimage.begin();

cv::matiterator_resiterend = tempimage.end();

// 遍歷影象反色處理

while( srciterstart != srciterend )

4)查詢表函式

可以根據查詢表的對映來進行畫素的變換:

cv::mat inversecolor6(cv::mat srcimage)  

可以參考以下博文:

roi允許我們選取影象特定的區域進行操作,有兩種方式。

1)使用矩形(rect)類

mat  roi;

roi=image(rect_ (_tp _x, _tp _y, _tp _width, _tp _height));

x,y這兩個引數就是矩形區域左上角的座標

width,height這兩個引數就是矩形局域的寬和高

2)手動指定感興趣的行和列的範圍

mat  roi;

roi=image(rect_ (range(row_start,row_end),range(col_strat,col_end)));

range(row_start,row_end):行的開始和結束

range(col_strat,col_end):列的開始和結束

可以參考以下博文:

計算直方圖:

void calchist(const mat* arrays, intnarrays, const int* channels, inputarray mask, outputarray 

hist, int dims,const int* histsize, const float** ranges, bool uniform=true, boolaccumulate=false );

引數解釋:

畫出直方圖:

void line(mat& img, point pt1, point pt2, const scalar& color, int thickness=1,

int linetype=8, int shift=0)

//兩點確認一條直線。

//linetype:直線型別

//shift:座標小數點維數

//畫乙個單一的實矩形

void rectangle(mat& img, point pt1,point pt2, const scalar& color, int thickness=1,

int linetype=8, int shift=0)

//一條對角線的兩個頂點可確定乙個矩形

//pt1和pt2互為對頂點

//thickness為負值表示矩形為實矩形

其中point(x,y)表示二維座標系下的點。

split用於通道分離

void split(const mat& src,mat *mvbegin)
第乙個引數為要進行分離的影象矩陣,第二個引數是乙個vector物件
merge用於通道合併

void merge(const vector& mv, outputarray dst );
第乙個引數是影象矩陣向量容器,第二個引數是輸出
舉例:

std::vectorrgb(3);

split(src, rgb); //分離通道

for (int i = 0; i < 3; i++)

merge(rgb, output); //合併通道

void minmaxloc(inputarray src, double* minval, double* maxval=0, point* minloc=0, point* maxloc=0, inputarray mask=noarray())
函式說明:

src:輸入影象。

minval:最小值,可輸入null表示不需要。

maxval :最大值,可輸入null表示不需要。

minloc:最小值的位置,可輸入null表示不需要,point型別。

maxloc:最大值的位置,可輸入null表示不需要,point型別。

mask:可有可無的掩模。

void rectangle(mat& img, point pt1,point pt2,const scalar& color, int thickness=1, int linetype=8, int shift=0)
img:輸入影象.

pt1:矩形的乙個頂點。

pt2:矩形對角線上的另乙個頂點

color:線條顏色 (rgb) 或亮度(灰度影象 )(grayscale image)。

thickness:組成矩形的線條的粗細程度。取負值時(如 cv_filled)函式繪製填充了色彩的矩形。

line_type:線條的型別。

shift:座標點的小數點位數。

Opencv 學習筆記(六)模板匹配

菜鳥一枚,這是我的第六個部落格,剛剛入門opencv,想將自己的學習過程分享給大家!include stdafx.h include include opencv highgui 模組 include opencv 影象處理標頭檔案 using namespace cv define window ...

opencv 學習筆記 1 常用函式和方法。

cv2.imread filename,falg filename是檔案名字 flag是讀入的方式 cv2.imread color 進行轉化為三通道影象。cv2.imread anydepth 如果影象深度為16位則讀出為16位,32位則讀出為32位,其餘的轉化為8位。實際應用中,falg 0就是...

OpenCV常用函式

直接訪問 效率高,但容易出錯 用指標直接訪問 在某些情況下簡單高效 image void operator iplimage img inline t operator const int rowindx typedef struct rgbpixel typedef struct rgbpixel...