OpenCv入門(一) 基本資料結構和標頭檔案

2021-08-14 04:10:48 字數 4740 閱讀 8226

opencv包含的模組

cv – 核心函式庫

cvaux – 輔助函式庫

cxcore – 資料結構與線性代數庫

highgui – gui函式庫

ml – 機器學習函式庫

函式名:

cvactiontargetmod(...)

action = 核心功能(core functionality) (e.g. set, create)

target = 目標影象區域(target image area) (e.g. contour, polygon)

mod 

= (可選的)調整語(optional modifiers) (e.g. argument type)

矩陣資料型別:

cv_(s|u|f)c

s = 符號整型

u = 無符號整型

f = 浮點型

e.g.: cv_8uc1  是指乙個8位無符號整型單通道矩陣,

cv_32fc2是指乙個32位浮點型雙通道矩陣.

影象資料型別:

ipl_depth_(s|u|f)

e.g.: ipl_depth_8u 影象畫素資料是8位無符號整型.

ipl_depth_32f影象畫素資料是32位浮點型.

標頭檔案:

#include

#include

#include

#include

#include

// 一般不需要,cv.h 內已包含該標頭檔案

opencv影象資料結構

(1) ipl 影象:

iplimage

|-- int  nchannels; 

// 顏色通道數目 (1,2,3,4)

|-- int  depth; 

// 畫素的位深:

|  // 

ipl_depth_8u, ipl_depth_8s,

|  // 

ipl_depth_16u,ipl_depth_16s,

|  // 

ipl_depth_32s,ipl_depth_32f,

|  // 

ipl_depth_64f

|-- int  width; 

// 影象寬度(畫素為單位)

|-- int  height;  

// 影象高度

|-- char* imagedata; 

// 影象資料指標 

(即指向儲存影象畫素值陣列的指標,內容是這個陣列的首位址)

|  // 注意彩色影象按bgr順序儲存資料

|-- int  dataorder; 

// 0 - 將畫素點不同通道的值交錯排在一起,形成單一畫素平面

|  // 1 - 把所有畫素同通道值排在一起,形成若干個通道平面,再把平面排列起來

|  // cvcreateimage 只能建立畫素交錯排列式的影象

|-- int  origin; 

// 0 – 畫素原點為左上角,

|  // 1 – 畫素原點為左下角 (windows bitmaps style)

|-- int  widthstep;  

// 相鄰行的同列點之間的位元組數 

(即影象每行所佔的位元組數,注意與每行所佔的畫素個數 width 區分)

|-- int  imagesize; 

// 影象的大小(位元組為單位) = height*widthstep

|-- struct _iplroi *roi;// 影象的感興趣區域(roi). roi非空時對影象的

|  // 處理僅限於roi區域.

|-- char *imagedataorigin; // 影象資料未對齊時的資料原點指標

|  // (需要正確地重新分配影象記憶體 )

|  // (needed for correct image deallocation)

|-- int  align; 

// 影象資料的行對齊: 4 or 8 byte alignment

|  // opencv 中無此項,採用widthstep代替

|-- char colormodel[4]; // 顏色模型 – opencv中忽略此項

矩陣與向量

(1) 矩陣:

cvmat 

// 2d 矩陣

|-- int 

type; 

// 元素型別 (uchar,short,int,float,double) 與標誌

|-- int 

step; 

// 整行長度位元組數

|-- int 

rows, cols; 

// 行、列數

|-- int 

height, width; // 矩陣高度、寬度,與rows、cols對應

|-- union data;

|-- uchar*  ptr; 

// data pointer for an unsigned char matrix

|-- short*  s; 

// data pointer for a short matrix

|-- int* 

i; // data pointer for an integer matrix

|-- float*  fl; 

// data pointer for a float matrix

|-- double* db; 

// data pointer for a double matrix

cvma*** 

// n-維矩陣

|-- int 

type; 

// 元素型別 (uchar,short,int,float,double) 與標誌

|-- int 

dims; 

// 矩陣維數

|-- union data;

|  |-- uchar*  ptr; 

// data pointer for an unsigned char 矩陣

|  |-- short*  s; 

// data pointer for a short matrix

|  |-- int* 

i; // data pointer for an integer matrix

|  |-- float*  fl; 

// data pointer for a float matrix

|  |-- double* db; 

// data pointer for a double matrix

| |-- struct dim; 

// 各維資訊

|-- size; 

// 元素數目

|-- step; 

// 元素間距(位元組為單位)

cvsparsemat // n-維稀疏矩陣

(2) 一般矩陣:

cvarr*

// 僅作為函式定義的引數使用,

// 表明函式可以接受不同型別的矩陣作為引數,

// 例如:iplimage*, cvmat* 甚至是 cvseq*.

// 矩陣的型別通過矩陣頭的前4個位元組資訊來確定

(3) 標量:

cvscalar

|-- double val[4]; //4d 向量

初始化函式:

cvscalar s = cvscalar(double val0, double val1=0, double val2=0, double val3=0);

// example:

cvscalar s = cvscalar(20.0);

s.val[0]=20.0;

注意該初始化函式的函式名與對應的結構體名稱幾乎同名,差別僅在於函式名第乙個字母是小寫的,而結構體名第乙個字母是大寫的。它並不是乙個 c++ 建構函式。(譯註:類似的還有 cvmat 與 cvmat、cvpoint 與 cvpoint 等等)

3、其它結構型別

(1) 點:

cvpoint 

p = cvpoint(int x, int y);

cvpoint2d32f p = cvpoint2d32f(float x, float y);

cvpoint3d32f p = cvpoint3d32f(float x, float y, float z);

p.x=5.0;

p.y=5.0;

(2) 矩形框大小(以畫素為精度):

cvsize 

r = cvsize(int width, int height);

cvsize2d32f  r = cvsize2d32f(float width, float height);

(3) 矩形框的偏置和大小:

cvrect 

r = cvrect(int x, int y, int width, int height);

opencv基本資料結構

iplimage 首先介紹重要的成員變數 width和height表示了的尺寸。其次是depth和nchannels,depth是指畫素顏色的取值範圍,nchnannels為影象的通道,可以取1,2,3,4 origin變數定義了影象的原點,有兩個取值,分別是ipl origin bl和ipl or...

opencv的基本資料結構

vec scalar point size rect rotatedrectvec類 1.1 基本概念 vec是乙個模板類,主要用於儲存數值向量。1.2 用法 1 可用它來定義任意型別的向量 vecmyvector 定義乙個存放8個double型變數的向量 2 使用 訪問vec向量成員 myvect...

OpenCV基本資料結構與示例

基本資料型別包括 vec scalar point size rect1 vec向量 vec是乙個模板類,主要用於儲存數值向量。typedef vec2 vec2b typedef vec3 vec3b typedef vec4 vec4b typedef vec short,2 vec2s typ...