OpenCV函數(shù)解析資料_第1頁(yè)
OpenCV函數(shù)解析資料_第2頁(yè)
OpenCV函數(shù)解析資料_第3頁(yè)
OpenCV函數(shù)解析資料_第4頁(yè)
OpenCV函數(shù)解析資料_第5頁(yè)
已閱讀5頁(yè),還剩200頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

CXCORE參考手冊(cè)

HUNNISH注:

本翻譯是直接根據(jù)OpenCVBeta4.0版本的用戶(hù)手冊(cè)翻

譯的,原文件是:

<opencv_directory>/doc/ref/opencvref_cxcore.htm,

可以從SOURCEFORG上面的OpenCV項(xiàng)目卡載,也可以

直接從阿須數(shù)碼中下載:

http:〃www.assuredigit.com/incoming/sourcecode/o

pencv/chinesedocs/ref/opencvrefcxcore.htm。

翻譯中肯定有不少錯(cuò)誤,另外也有些術(shù)語(yǔ)和原文語(yǔ)義理

解不透導(dǎo)致翻譯不準(zhǔn)確或者錯(cuò)誤,也請(qǐng)有心人賜教。

翻譯由Y.Q.Zhang,J.H.Tan,X.C.Qin,M.Liu和

Z.T.Fan鼎力完成,全文由Hunnish做統(tǒng)一修改校正。

?基礎(chǔ)結(jié)構(gòu)

?數(shù)組操作

O初始化

O獲取元素和數(shù)組素集

O拷貝和填充

O變換和置換

O算術(shù)、邏輯和比較

O統(tǒng)計(jì)

O線性代數(shù)

O數(shù)學(xué)函數(shù)

O隨機(jī)數(shù)生成

。離散變換

?動(dòng)態(tài)結(jié)構(gòu)

O內(nèi)存存儲(chǔ)

O序列

olS

O圖

O機(jī)

?繪圖函數(shù)

o典線和形狀

oxi

0點(diǎn)集和輪廓

?數(shù)據(jù)保存和運(yùn)行時(shí)類(lèi)型信息樊臻韜

。文件存儲(chǔ)

O寫(xiě)數(shù)據(jù)

O讀數(shù)據(jù)

O運(yùn)行時(shí)類(lèi)型信息和通用函數(shù)-

?其它混合函數(shù)

***

?錯(cuò)誤處理和系統(tǒng)函數(shù)

O錯(cuò)誤處理

O系統(tǒng)函數(shù)譚俊河

?依字母順序函數(shù)列表

?例子列表----------------------------------

基礎(chǔ)結(jié)構(gòu)

CvPoint

基于二維整形坐標(biāo)軸的點(diǎn)

typedefstructCvPoint

(

intx;/*X坐標(biāo),通常以0為基點(diǎn)*/

inty;/*y坐標(biāo),通常以0為基點(diǎn)*/

)

CvPoint;

/*構(gòu)造函數(shù)*/

inlineCvPointcvPoint(intx,inty);

/*從CvPoint2D32f類(lèi)型轉(zhuǎn)換得來(lái)*/

inlineCvPointcvPointFrom32f(CvPoint2D32f

point);

CvPoint2D32f

二維浮點(diǎn)坐標(biāo)上的點(diǎn)

typedefstructCvPoint2D32f

floatx;/*X坐標(biāo),通常以0為基點(diǎn)*/

floaty;/*Y坐標(biāo),通常以0為基點(diǎn)*/

CvPoint2D32f;

/*構(gòu)造函數(shù)*/

inlineCvPoint2D32fcvPoint2D32f(doublex,

doubley);

/*從CvPoint轉(zhuǎn)換來(lái)*/

inlineCvPoint2D32fcvPointTo32f(CvPoint

point);

CvPoint3D32f

三維浮點(diǎn)坐標(biāo)上的點(diǎn)

typedefstructCvPoint3D32f

(

floatx;/*x-坐標(biāo),通?;?*/

floaty;/*y-坐標(biāo),通?;?*/

floatz;/*z-坐標(biāo),通常基于0*/

)

CvPoint3D32f;

/*構(gòu)造函數(shù)*/

inlineCvPoint3D32fcvPoint3D32f(doublex,

doubley,doublez);

CvSize

矩形框大小,以像素為精度

typedefstructCvSize

(

intwidth;/*矩形寬*/

intheight;/*矩形高*/

)

CvSize;

/*構(gòu)造函數(shù)*/

inlineCvSizecvSize(intwidth,intheight);

CvSize2D32f

以低像素精度標(biāo)量矩形框大小

typedefstructCvSize2D32f

floatwidth;/*矩形寬*/

floatheight;/*矩形高*/

CvSize2D32f;

/*構(gòu)造函數(shù)*/

inlineCvSize2D32fcvSize2D32f(doublewidth,

doubleheight);

CvRect

矩形框的偏移和大小

typedefstructCvRect

(

intx;/*方形的最左角的x-坐標(biāo)*/

inty;/*方形的最上或者最下角的y-坐標(biāo)*/

intwidth;/*寬*/

intheight;/*高*/

)

CvRect;

/*構(gòu)造函數(shù)*/

inlineCvRectcvRect(intx,inty,intwidth,

intheight);

CvScalar

可存放在卜,2-,3-,4-TUPLE類(lèi)型的捆綁數(shù)據(jù)的容器

typedefstructCvScalar

(

doubleval[4]

)

CvScalar;

/*構(gòu)造函數(shù):用valO初始化val[0]用vail初始化

val[1]等等*/

inlineCvScalarcvScalar(doublevalO,double

val1=0,

doubleval2=0,

doubleval3=0);

/*構(gòu)造函數(shù):用val0123初始化val0123*/

inlineCvScalarcvScalarAll(doubleval0123);

/*構(gòu)造函數(shù):用valO初始化val[0],val[1]???val[3]

用0初始化*/

inlineCvScalarcvRealScalar(doublevalO);

CvTermCriteria

迭代算法的終止標(biāo)準(zhǔn)

#defineCV_TERMCRIT_ITER1

#defineCV_TERMCRIT_NUMBERCV_TERMCRIT_ITER

#defineCV_TERMCRIT_EPS2

typedefstructCvTermCriteria

(

inttype;/*CV_TERMCRIT_ITER和

CV_TERMCRIT_EPS的聯(lián)合*/

intmax_iter;/*迭代的最大數(shù)*/

doubleepsilon;/*結(jié)果的精確性*/

)

CvTermCriteria;

/*構(gòu)造函數(shù)*/

inlineCvTermCriteriaCvTermCriteria(inttype,

intmax_iter,doubleepsilon);

/*檢查終止標(biāo)準(zhǔn)并且轉(zhuǎn)換使

type=CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,并且滿(mǎn)足

max_iter和epsilon限制條件*/

CvTermCriteria

cvCheckTermCriteria(CvTermCriteriacriteria,

double

default_eps,

int

default_max_iters);

CvMat

多通道矩陣

tvpedefstructCvMat

(

inttype;/*CvMat標(biāo)識(shí)(CV_MAT_MAGIC_VAL),

元素類(lèi)型和標(biāo)記*/

intstep;/*以字節(jié)為單位的行數(shù)據(jù)長(zhǎng)度*/

int*refcount;/*數(shù)據(jù)參考計(jì)數(shù)*/

union

(

uchar*ptr;

short*s;

int*i;

float*fl;

double*db;

}data;/*data指針*/

Sifdef_cplusplus

union

(

introws;

intheight;

};

union

(

intcols;

intwidth;

);

ttelse

introws;/*行數(shù)*/

intcols;/*列數(shù)*/

Sendif

}CvMat;

CvMatND

多維、多通道密集數(shù)組

typedefstructCvMatND

(

inttype;/*CvMatND標(biāo)識(shí)

(CV_MATND_MAGIC_VAL),元素類(lèi)型和標(biāo)號(hào)*/

intdims;/*數(shù)組維數(shù)*/

int*refcount;/*數(shù)據(jù)參考計(jì)數(shù)*/

union

uchar*ptr;

short*s;

int*i;

float*fl;

double*db;

}data;/*data指針*/

/*每維的數(shù)據(jù)結(jié)構(gòu)(元素號(hào),以字節(jié)為單位的

元素之間的距離)是配套定義的*/

struct

(

intsize;

intstep;

)

dim[CV_MAX_DIM];

}CvMatND;

CvSparseMat

多維、多通道稀疏數(shù)組

typedefstructCvSparseMat

inttype;/*CvSparseMat標(biāo)識(shí)

(CV_SPARSE_MAT_MAGIC_VAL),元素類(lèi)型和標(biāo)號(hào)*/

intdims;/*維數(shù)*/

int*refcount;/*參考數(shù)量-未用*/

structCvSet*heap;/*HASH表節(jié)點(diǎn)池*/

void**hashtable;/*HASH表:每個(gè)入口有一

個(gè)節(jié)點(diǎn)列表,有相同的〃以HASH大小為模板的HASH值〃

*/

inthashsize;/*HASH表大小*/

inttotal;/*稀疏數(shù)組的節(jié)點(diǎn)數(shù)*/

intvaloffset;/*數(shù)組節(jié)點(diǎn)值在字節(jié)中的偏

移*/

intidxoffset;/*數(shù)組節(jié)點(diǎn)索引在字節(jié)中的

偏移*/

intsize[CV_MAX_DIM];/*維大小*/

}CvSparseMat;

IplImage

IPL圖像頭

typedefstruct_IplImage

intnSize;/*IpHmage大小*/

intID;/*版本(=0)*/

intnChannels;/*大多數(shù)OPENCV函數(shù)

支持1,2,3或4個(gè)通道*/

intalphaChannel;/*被OpenCV忽略*/

intdepth;/*像素的位深度:

IPL_DEPTH_8U,IPL_DEPTH_8S,IPL_DEPTH_16U,

IPL_DEPTH_16S,

IPL_DEPTH_32S,IPL?DEPTH_32FandIPL_DEPTH_64F可

支持*/

charcolorModel[4];/*被OpenCV忽略*/

charchannelSeq[4];/*同上*/

intdataOrder;/*0-交叉存取顏色通

道,1-分開(kāi)的顏色通道.

只有cvCreatelmage

可以創(chuàng)建交叉存取圖像*/

intorigin;/*0-頂一左結(jié)構(gòu),

1-底一左結(jié)構(gòu)

(Windowsbitmaps風(fēng)格)*/

intalign;/*圖像行排列(4or

8).OpenCV忽略它,使用widthStep代替*/

intwidth;/*圖像寬像素?cái)?shù)*/

intheight;/*圖像高像素?cái)?shù)*/

struct_IplROI*roi;/*圖像感興趣區(qū)域.當(dāng)

該值非空只對(duì)該應(yīng)域進(jìn)行處理*/

struct_IplImage*maskR0I;/*在OpenCV中

必須置NULL*/

void*imageld;/*同上*/

struct_IplTilelnfo*tilelnfo;/*同上*/

intimageSize;/*圖像數(shù)據(jù)大?。ㄔ诮?/p>

叉存取格式下

imageSize=image->height*image->widthStep),單位

字節(jié)*/

char*imageData;/*指向排列的圖像數(shù)據(jù)

*/

intwidthStep;/*排列的圖像行大小,以

字節(jié)為單位*/

intBorderMode[4];/*邊際結(jié)束模式,被

OpenCV忽略*/

intBorderConst[4];/*同上*/

char*imageDataOrigin;/*指針指向一個(gè)不

同的圖像數(shù)據(jù)結(jié)構(gòu)(不是必須排列的),是為了糾正圖

像內(nèi)存分配準(zhǔn)備的*/

IplImage;

IpHmage結(jié)構(gòu)來(lái)自于IntelImageProcessing

Library(是其本身所具有的).OpenCV只支持其中的

一個(gè)子集:

?alpha通道在OpenCV中被忽略.

?colorModel和channelSeq被OpenCV忽略.OpenCV

顏色轉(zhuǎn)換的唯一個(gè)函數(shù)cvCvlColor把原圖像的

顏色空間的目標(biāo)圖像的顏色空間作為一個(gè)參數(shù).

?數(shù)據(jù)順序必須是IPL_DATA_ORDER_PIXEL(顏色通道

是交叉存?。?,然而平面圖像的被選擇通道可以

被處理,就像C0I(感興趣的通道)被設(shè)置過(guò)一樣.

.當(dāng)widthStep被用于去接近圖像行序列,排列是被

OpenCV忽略的.

?不支持maskROI.處理MASK的函數(shù)把他當(dāng)作一個(gè)分

離的參數(shù).MASK在OpenCV里是8-bit,然而在

IPL他是1-bit.

.名字信息不支持.

.邊際模式和邊際常量是不支持的.每個(gè)OpenCV函

數(shù)處理像素的鄰近的像素,通常使用單一的固定

代碼邊際模式.

除了上述限制,OpenCV處理R0I有不同的要求.要求原圖

像和目標(biāo)圖像的尺寸或R0I的尺寸必須(根據(jù)不同的作

操,例如cvPy例own目標(biāo)圖像的寬(高)必須等于原圖

像的寬(高)除2土1)精確匹配,而IPL處理交叉區(qū)域,

如圖像的大小或R0I大小可能是完全獨(dú)立的。

CvArr

不確定數(shù)組

typedefvoidCvArr;

CvArr*僅僅是被用于作函數(shù)的參數(shù),用于指示函數(shù)接收

的數(shù)組類(lèi)型可以不止一個(gè),如Ipllmage*,CvMat*甚至

CvSeq*.最終的數(shù)組類(lèi)型是在運(yùn)行時(shí)通過(guò)分析數(shù)組頭的

前4個(gè)字節(jié)判斷。

數(shù)組操作

初始化

CreateImage

創(chuàng)建頭并分配數(shù)據(jù)

IplImage*cvCreatelmage(CvSizesize,intdepth,

intchannels);

size

圖像寬、高.

depth

圖像元素的位深度,可以是下面的其中之一:

IPL_DEPTH_8U-無(wú)符號(hào)8位整型

IPL_DEPTH_8s-有符號(hào)8位整型

IPL_DEPTH_16U-無(wú)符號(hào)16位整型

IPL_DEPTH_16S-有符號(hào)16位整型

IPL_DEPTH_32S,-有符號(hào)32位整型

IPL_DEPTH_32F-單精度浮點(diǎn)數(shù)

IPL_DEPTH_64F'-雙精度浮點(diǎn)數(shù)

channels

每個(gè)元素(像素)通道號(hào).可以是1,2,3或4.通道是交叉

存取的,例如通常的彩色圖像數(shù)據(jù)排列是:

bOgOrOblglrl...

雖然通常IPL圖象格式可以存貯非交叉存取的圖像,并且一

些OpenCV也能處理他,但是這個(gè)函數(shù)只能創(chuàng)建交叉存取圖

像.

函數(shù)cvCrealelmage創(chuàng)建頭并分配數(shù)據(jù),這個(gè)函數(shù)是下

列的縮寫(xiě)型式

header=

cvCreatelmageHeader(size,depth,channels);

cvCreateData(header);

CreatelmageHeader

分配,初始化,并且返回Ipl工mage結(jié)構(gòu)

IplImage*cvCreatelmageHeader(CvSizesize,int

depth,intchannels);

size

圖像寬、高.

depth

像深(見(jiàn)Createlmage).

channels

通道數(shù)(見(jiàn)Createlmage).

函數(shù)cvCreatelmageHeader分配,初始化,并且返回

Ipllmage結(jié)構(gòu).這個(gè)函數(shù)相似于:

iplCreatelmageHeader(channels,0,depth,

channels==1?"GRAY”:

〃RGB〃,

channels==1?"GRAY”:

channels==3?〃BGR〃:

channels==4?〃BGRA〃:

〃〃

IPL_DATA_ORDER_PIXEL,

IPL_ORIGIN_TL,4,

size,width,size,height,

0,0,0,0);

然而IPL函數(shù)不是作為默認(rèn)的(見(jiàn)

CV_TURN_ON_IPL_COMPATIBILITY宏)

ReleaselmageHeader

釋放頭

voidcvReleaselmageHeader(Ipllmage**image);

image

雙指針指向頭內(nèi)存分配單元.

函數(shù)cvReleaselmageHeader釋放頭.相似于

if(image)

(

iplDeallocate(*image,IPL_IMAGEHEADER|

IPL_IMAGE_ROI);

*image=0;

)

然而IPL函數(shù)不是作為默認(rèn)的(見(jiàn)

CV_TURN_ON_IPL_COMPATIBILITY宏)

Releaselmage

釋放頭和圖像數(shù)據(jù)

voidcvReleaselmage(IplImage**image);

image

雙指針指向圖像內(nèi)存分配單元。

函數(shù)cvReleaselmage釋放頭和圖像數(shù)據(jù),相似于:

if(*image)

(

cvReleaseData(*image);

cvReleaselmageHeader(image);

)

InitlmageHeader

初始他被用圖分配的圖像頭

IplImage*cvInitlmageHeader(IplImage*image,

CvSizesize,intdepth,

intchannels,int

origin=0,intalign=4);

image

被初始化的圖像頭.

size

圖像的寬高.

depth

像深(見(jiàn)Createlmage).

channels

通道數(shù)(見(jiàn)Createlmage).

origin

IPL_ORIGIN_TL或IPL_ORIGIN_BL.

align

圖像行排列,典型的4或8字節(jié).

函數(shù)cvInitlmageHeader初始他圖像頭結(jié)構(gòu),指向用

戶(hù)指定的圖像并且返回這個(gè)指針。

Clonelmage

制作圖像的完整拷貝

IplImage*cvClonelmage(constIplImage*image);

image

原圖像.

函數(shù)cvClonelmage制作圖像的完整拷貝包括頭、R0I和

數(shù)據(jù)

SetlmageCOI

基于給定的值設(shè)置感興趣通道

voidcvSetlmageCOI(IplImage*image,intcoi);

image

圖像頭.

coi

感興趣通道.

函數(shù)cvSetlmageCOI基于給定的值設(shè)置感興趣的通道。

值0意味著所有的通道都被選定,1意味著第一個(gè)通道

被選定等等。如果R0I是NULL并且COI!=0,R0I被

分配.然而大多數(shù)的OpenCV函數(shù)不支持C0I,對(duì)于這

種狀況當(dāng)處理分離圖像/矩陣通道時(shí),可以拷貝(通過(guò)

cvCopy號(hào)cvSplit)通道來(lái)分離圖像/矩陣,處理后如

果需要可再拷貝(通過(guò)cvCopy或cvCvlPlaneToPix)回

來(lái).

GetlmageCOI

返回感興趣通道號(hào)

intcvGetlmageCOI(constIplImage*image);

image

圖像頭.

函數(shù)cvGetlmageCOI返回圖像的感興趣通道(當(dāng)所有的

通道都被選中返回值是0).

SetlmageROI

基于給定的矩形設(shè)置感興趣區(qū)域

voidcvSetlmageROI(IplImage*image,CvRectrect);

image

圖像頭.

rect

ROI矩形.

函數(shù)cvSellmageROI基于給定的矩形設(shè)置圖像的R0I

(感興趣區(qū)域).如果R0I是NULL并且參數(shù)RECT的值

不等于整個(gè)圖像,R0I被分配.不像C0I,大多數(shù)的

OpenCV函數(shù)支持R0I并且處理它就行它是一個(gè)分離的

圖像(例如,所有的像素坐標(biāo)從R0I的頂-左或底-左角

(基于圖像的結(jié)構(gòu))計(jì)算。

ResetlmageROI

釋放圖像的ROI

voidcvResetlmageROI(IplImage*image);

image

圖像頭.

函數(shù)cvResetlmageROI釋放圖像ROI.釋放之后整個(gè)

圖像被認(rèn)為是全部被選中的。相似的結(jié)果可以通過(guò)下述

辦法

cvSetlmageROI(image,cvRect(0,0,image->width,

image->height));

cvSetlmageCOI(image,0);

但是后者的變量不分配image->roi.

GetlmageROI

返回圖像的ROI坐標(biāo)

CvRectcvGetlmageROI(constIplImage*image);

image

圖像頭.

函數(shù)cvGetlmageROI返回圖像ROI坐標(biāo).如果沒(méi)有ROI

則返回矩形值為

cvRect(0,0,image->width,image->height)

CreateMat

創(chuàng)建矩陣

CvMat*cvCreateMat(introws,intcols,inttype);

rows

矩陣行數(shù).

cols

矩陣列數(shù).

type

矩陣元素類(lèi)型.通常以

CV_<bit_depth>(S|U|F)C<number_of_channels>型式描述,

例如:

CV_8UC1意思是一個(gè)8-bit無(wú)符號(hào)單通道矩陣,CV_32SC2意

思是一個(gè)32-bit有符號(hào)二個(gè)通道的矩陣.

函數(shù)cvCreateMat為新的矩陣分配頭和下面的數(shù)據(jù),

并且返回一個(gè)指向新創(chuàng)建的矩陣的指針.是下列操作的

縮寫(xiě)型式:

CvMat*mat=cvCreateMatHeader(rows,cols,

type);

cvCreateData(mat);

矩陣按行存貯.所有的行以4個(gè)字節(jié)排列。

CreateMatHeader

創(chuàng)建新的矩陣頭

CvMat*cvCreateMatHeader(introws,intcols,int

type);

rows

矩陣行數(shù).

cols

矩陣列數(shù).

type

矩陣元素類(lèi)型(見(jiàn)cvCreateMat).

函數(shù)cvCreateMatHeader分配新的矩陣頭并且返回指

向它的指針.矩陣數(shù)據(jù)可被進(jìn)一步的分配,使用

cvCreateData或通過(guò)cvSetData明確的分配數(shù)據(jù).

ReleaseMat

刪除矩陣

voidcvReleaseMat(CvMat**mat);

mat

雙指針指向矩陣.

函數(shù)cvReleaseMat縮減矩陣數(shù)據(jù)參考計(jì)數(shù)并且釋放矩

陣頭:

if(*mat)

cvDecRefData(*mat);

cvFree((void**)mat);

InitMatHeader

初始化矩陣頭

CvMat*cvInitMatHeader(CvMat*mat,introws,int

cols,inttype,

void*data=NULL,int

step=CV_AUTOSTEP);

mat

指針指向要被初始化的矩陣頭.

rows

矩陣的行數(shù).

cols

矩陣的列數(shù).

type

矩陣元素類(lèi)型.

data

可選的,將指向數(shù)據(jù)指針?lè)峙浣o矩陣頭.

step

排列后的數(shù)據(jù)的整個(gè)行寬,默認(rèn)狀態(tài)下,使用STEP的最小可

能值。例如假定矩陣的行與行之間無(wú)隙

函數(shù)cvInitMatHeader初始化已經(jīng)分配了的CvMat結(jié)

構(gòu).它可以被Open以矩陣函數(shù)用于處理原始數(shù)據(jù)。

例如,下面的代碼計(jì)算通用數(shù)組格式存貯的數(shù)據(jù)的矩陣

乘積.

計(jì)算兩個(gè)矩陣的積

doublea[]={1,2,3,4

5,6,7,8,

9,10,11,12);

doubleb[]={1,5,9,

2,6,10,

3,7,11,

4,8,12);

doublec[9];

CvMatMa,Mb,Me

cvInitMatHeader(&Ma,3,4,CV_64FC1,a);

cvlnitMatHeader(&Mb,4,3,CV_64FC1,b);

cvInitMatHeader(&Mc,3,3,CV_64FC1,c);

cvMatMulAdd(&Ma,&Mb,0,&Mc);

//c數(shù)組存貯a(3x4)和b(4x3)矩陣的積

Mat

初始化矩陣的頭(輕磅變量)

CvMatcvMat(introws,intcols,inttype,void*

data=NULL);

rows

矩陣行數(shù)

cols

列數(shù).

type

元素類(lèi)型(見(jiàn)CreateMat).

data

可選的分配給矩陣頭的數(shù)據(jù)指針.

函數(shù)cvMal是個(gè)一快速內(nèi)連函數(shù),替代函數(shù)

cvInitMatHeader.也就是說(shuō)他相當(dāng)于:

CvMatmat;

cvInitMatHeader(&mat,rows,cols,type,data,

CV_AUTOSTEP);

CloneMat

創(chuàng)建矩陣拷貝

CvMat*cvCloneMat(constCvMat*mat);

mat

輸入矩陣.

函數(shù)cvCloneMat創(chuàng)建輸入矩陣的?個(gè)拷貝并且返回

該矩陣的指針.

CreateMatND

創(chuàng)建多維密集數(shù)組

CvMatND*cvCreateMatND(intdims,constint*sizes,

inttype);

dims

數(shù)組維數(shù).但不許超過(guò)CV_MAX_DIM(默認(rèn)=32,但這個(gè)默認(rèn)值

可能在編譯時(shí)被改變)的定義

sizes

數(shù)組的維大小.

type

數(shù)組元素類(lèi)型.與CvMat相同

函數(shù)cvCreateMatND分配頭給多維密集數(shù)組并且分配下

面的數(shù)據(jù),返回指向被創(chuàng)建數(shù)組的指針.是下列的縮減

形式:

CvMatND*mat=cvCreateMatNDHeader(dims,sizes,

type);

cvCreateData(mat);

矩陣按行存貯.所有的行以4個(gè)字節(jié)排列。.

CreateMatNDHeader

創(chuàng)建新的數(shù)組頭

CvMatND*cvCreateMatNDHeader(intdims,constint*

sizes,inttype);

dims

數(shù)組維數(shù).

sizes

維大小.

type

數(shù)組元素類(lèi)型.與CvMat相同

函數(shù)cvCreateMatND分配頭給多維密集數(shù)組。數(shù)組數(shù)據(jù)

可以用cvCrcaleDala進(jìn)一步的被分配或利用

cvSetData由用戶(hù)明確指定.

ReleaseMatND

刪除多維數(shù)組

voidcvReleaseMatND(CvMatND**mat);

mat

指向數(shù)組的雙指針.

函數(shù)cvReleaseMatND縮減數(shù)組參考計(jì)數(shù)并釋放數(shù)組

頭:

if(*mat)

cvDecRefData(*mat);

cvFree((void**)mat);

InitMatNDHeader

初始化多維數(shù)組頭

CvMatND*cvlnitMatNDHeader(CvMatND*mat,intdims,

constint*sizes,inttype,void*data=NULL);

mat

指向要被出初始化的數(shù)組頭指針.

dims

數(shù)組維數(shù).

sizes

維大小.

type

數(shù)組元素類(lèi)型.與CvMat相同

data

可選的分配給矩陣頭的數(shù)據(jù)指針.

函數(shù)cvlnitMatNDHeader初始化用戶(hù)指派的CvMatND

結(jié)構(gòu).

CloneMatND

創(chuàng)建多維數(shù)組的完整拷貝

CvMatND*cvCloneMatND(constCvMatND*mat);

mat

輸入數(shù)組

函數(shù)cvCloneMatND創(chuàng)建輸入數(shù)組的拷貝并返回指針.

DecRefData

縮減數(shù)組數(shù)據(jù)的參考計(jì)數(shù)

voidcvDecRefData(CvArr*arr);

arr

數(shù)組頭.

函數(shù)cvDecRefDala縮減函數(shù)I或Cv函數(shù)D數(shù)據(jù)的參考

計(jì)數(shù),如參考計(jì)數(shù)指針?lè)荖iii1年且計(jì)數(shù)到0就刪除數(shù)據(jù),

在當(dāng)前的執(zhí)行中只有當(dāng)數(shù)據(jù)是用cvCrealeData分配的

參考計(jì)算才會(huì)是非NULL,換句話說(shuō):

使用cvSelDala指派外部數(shù)據(jù)給頭

矩陣頭代表部分大的矩陣或圖像

矩陣頭是從圖像頭或N維矩陣頭轉(zhuǎn)換過(guò)來(lái)的。

參考計(jì)數(shù)如果被設(shè)置成NULL就不會(huì)被縮減.無(wú)論數(shù)據(jù)是

否被刪除,數(shù)據(jù)指針和參考計(jì)數(shù)指針都將被這個(gè)函數(shù)清

空。

IncRefData

增加數(shù)組數(shù)據(jù)的參考計(jì)數(shù)

intcvIncRefData(CvArr*arr);

arr

數(shù)組頭.

函數(shù)cvIncRefData增加CvMat或CvMatND數(shù)據(jù)參考

計(jì)數(shù),如果參考計(jì)數(shù)非空返回新的計(jì)數(shù)值否則返回0。

CreateData

分配數(shù)組數(shù)據(jù)

voidcvCreateData(CvArr*arr);

arr

數(shù)組頭.

函數(shù)cvCreateData分配圖像,矩陣或多維數(shù)組數(shù)據(jù).

對(duì)于矩陣類(lèi)型使用OpenCV的分配函數(shù),對(duì)于IplImage

類(lèi)型如果CV_TURN_ON_IPL_COMPATIBILITY沒(méi)有被調(diào)用也

是可以使用這種方法M反之使用IPL函數(shù)分配數(shù)據(jù)

ReleaseData

釋放數(shù)組數(shù)據(jù)

voidcvReleaseData(CvArr*arr);

arr

數(shù)組頭

函數(shù)cvReleaseData釋放數(shù)組數(shù)據(jù).對(duì)于CvMat或

CvMatND結(jié)構(gòu)只需調(diào)用cvDecRefDataO,也就是說(shuō)這

個(gè)函數(shù)不能刪除外部數(shù)據(jù)。見(jiàn)cvCreateData.

SetData

指派用戶(hù)數(shù)據(jù)給數(shù)組頭

voidcvSetData(CvArr*arr,void*data,intstep);

arr

數(shù)組頭.

data

用戶(hù)數(shù)據(jù).

step

整行字節(jié)長(zhǎng).

函數(shù)cvSetData指派用記數(shù)據(jù)給數(shù)組頭.頭應(yīng)該已經(jīng)使

用cvCreate*Header,cvInit*Header或cvMat(對(duì)于

矩陣)初始化過(guò).

GetRawData

返回組數(shù)的底層信息

voidcvGetRawData(constCvArr*arr,uchar**data,

int*step=NULL,CvSize*

roi_size=NULL);

arr

數(shù)組頭.

data

輸出指針,指針指向整個(gè)圖像的結(jié)構(gòu)或ROI

step

輸出行字節(jié)長(zhǎng)

roi_size

輸出ROI尺寸

函數(shù)cvGetRawData添充給輸出變量數(shù)組的底層信息。

所有的輸出參數(shù)是可選的,因此這些指針可設(shè)為NULL.

如果數(shù)組是設(shè)置了ROI的IplImage結(jié)構(gòu),ROI參數(shù)被返

回。

接下來(lái)的例子展示怎樣去接近數(shù)組元素。

使用GetRawData計(jì)算單通道浮點(diǎn)數(shù)組的元素絕對(duì)值.

float*data;

intstep;

CvSizesize;

intx,y;

cvGetRawData(array,(uchar**)&data,&step,

&size);

step/=sizeof(data[0]);

for(y=0;y<size,height;y++,data+=step)

for(x=0;x<size.width;x++)

data[x]=(float)fabs(data[x]);

GetMat

從不確定數(shù)組返回矩陣頭

CvMat*cvGetMat(constCvArr*arr,CvMat*header,

int*coi=NULL,intallowND=0);

arr

輸入數(shù)組.

header

指向CvMat結(jié)構(gòu)的指針,作為臨時(shí)緩存.

coi

可選的輸出參數(shù),用于輸出C0I.

allowND

如果非0,函數(shù)就接收多維密集數(shù)組(CvMatND*)并且返回2D

(如果CvMatND是二維的)或1D矩陣(當(dāng)CvMatND是一維或

多于二維).數(shù)組必須是連續(xù)的.

函數(shù)cvGetMat從輸入的數(shù)組生成矩陣頭,輸入的數(shù)組可

以是-CvMat結(jié)構(gòu),Ipllmage結(jié)構(gòu)或多維密集數(shù)組

CvMatND*(后者只有當(dāng)allowND!=0H寸才可以使用).

如果是矩陣函數(shù)只是返回指向矩陣的指針.如果是

Ipllmage*或CvMatND*函數(shù)用當(dāng)前圖像的R0I初始化

頭結(jié)構(gòu)并且返回指向這個(gè)臨時(shí)結(jié)構(gòu)的指針。因?yàn)镃vMat

不支持C0I,所以他們的返回結(jié)果是不同的.

這個(gè)函數(shù)提供了一個(gè)簡(jiǎn)單的方法,用同一代碼處理

Ipllmage和CvMat二種數(shù)據(jù)類(lèi)型。這個(gè)函數(shù)的反向轉(zhuǎn)換

可以用cvGetlmage將CvMat轉(zhuǎn)換成Ipllmage.

輸入的數(shù)組必須有已分配好的底層數(shù)據(jù)或附加的數(shù)據(jù),

否則該函數(shù)將調(diào)用失敗

如果輸入的數(shù)組是Ipllmage格式,使用平面式數(shù)據(jù)編排

并設(shè)置了C0L函數(shù)返回的指針指向被選定的平面并設(shè)置

C0I=0.利用OPENCV函數(shù)對(duì)于多通道平面編排圖像可以處

理每個(gè)平面。

GetImage

從不確定數(shù)組返回圖像頭

Ipllmage*cvGetlmage(constCvArr*arr,Ipllmage*

image_header);

arr

輸入數(shù)組.

image_header

指向Ipllmage結(jié)構(gòu)的指針,該結(jié)構(gòu)存貯在一個(gè)臨時(shí)緩存.

函數(shù)cvGetlmage從輸出數(shù)組獲得圖頭,該數(shù)組可是以

矩陣-CvMat*,或圖像-Ipllmage*.如果是圖像函數(shù)

只是返回輸入?yún)?shù)的指針,如是查CvMat*函數(shù)用輸入

參數(shù)矩陣初始化圖像頭。因此如果我們把Ipllmage轉(zhuǎn)

換成CvMat然后再轉(zhuǎn)換CvMat回Ipllmage,如果R0I

被設(shè)置過(guò)了我們可能會(huì)獲得不同的頭,這樣一些計(jì)算圖

像跨度的IPL函數(shù)就會(huì)失敗。

CreateSparseMat

創(chuàng)建稀疏數(shù)組

CvSparseMat*cvCreateSparseMat(intdims,const

int*sizes,inttype);

dims

數(shù)組維數(shù)。相對(duì)于密集型矩陣,稀疏數(shù)組的維數(shù)是不受限制的

(最多可達(dá)216).

sizes

數(shù)組的維大小.

type

數(shù)組元素類(lèi)型,見(jiàn)CvMat

函數(shù)cvCreateSparseMat分配多維稀疏數(shù)組.

Initiallythearraycontainnoelements,thatis

cvGet*DorcvGetReal*Dreturnzeroforeveryindex

ReleaseSparseMat

刪除稀疏數(shù)組

voidcvReleaseSparseMat(CvSparseMat**mat);

mat

雙指針指向數(shù)組。

函數(shù)cvReleaseSparseMat釋放稀疏數(shù)組并清空數(shù)組指

CloneSparseMat

創(chuàng)建稀疏數(shù)組的拷貝

CvSparseMat*cvCloneSparseMat(constCvSparseMat*

mat);

mat

輸放的數(shù)組。

函數(shù)cvCloneSparseMat創(chuàng)建輸入數(shù)組的拷貝并返回指

向這個(gè)拷貝的指針.

獲取元素和數(shù)組子集

GetSubRect

根據(jù)輸入的圖像或矩陣的矩形數(shù)組子集返回矩陣頭

CvMat*cvGetSubRect(constCvArr*arr,CvMat*

submat,CvRectrect);

arr

輸入數(shù)組

submat

指針指向結(jié)果數(shù)組頭Pointertotheresultantsub-array

header.

rect

以0坐標(biāo)為基準(zhǔn)的ROL

函數(shù)cvGe屈ubRect根據(jù)指定的數(shù)組矩形返回矩陣頭,

換句話說(shuō),函數(shù)允許處理輸入數(shù)組的指定的一個(gè)子矩形,

就像一個(gè)獨(dú)立的數(shù)組一樣進(jìn)行處理。函數(shù)在處理時(shí)要考

慮進(jìn)輸入數(shù)組的R0I,因此數(shù)組的R0I是實(shí)際上被提取的。

GetRow,GetRows

返回?cái)?shù)組的行或在一定跨度內(nèi)的行

CvMat*cvGetRow(constCvArr*arr,CvMat*submat,

introw);

CvMat*cvGetRows(constCvArr*arr,CvMat*submat,

intstart_row,intend_row,intdelta_row=l);

arr

輸入數(shù)組.

submat

指向返回的子數(shù)組頭的指針.

row

被選定的行號(hào)下標(biāo),以0為基準(zhǔn).

start_row

跨度的開(kāi)始行(包括此行)索引下標(biāo),以0為下標(biāo)基準(zhǔn)

end_row

跨度的寤束行(不包括此行)索引下標(biāo),以0為下標(biāo)基準(zhǔn).

delta_row

在跨度內(nèi)向索引下標(biāo)跨步,從開(kāi)始行到結(jié)束行每隔delta_row

行提取一行。

函數(shù)GetRow和GetRows根據(jù)指定的行或跨度從輸入數(shù)

組中返回對(duì)應(yīng)的頭。GetRow是cvGelRows的縮寫(xiě):

cvGetRow(arr,submat,row)~cvGetRows(arr,

submat,row,row+1,1);

GetCol,GetCols

返回?cái)?shù)組的列或一定跨度內(nèi)的列

CvMat*cvGetCol(constCvArr*arr,CvMat*submat,

intcol);

CvMat*cvGetCols(constCvArr*arr,CvMat*submat,

intstart_col,intend_col);

arr

輸入數(shù)組

submat

指向結(jié)果子數(shù)組頭指針.

col

選定的列索引下標(biāo),該下標(biāo)以0為基準(zhǔn)。

start_col

跨度的開(kāi)始列(包括該列)索引下標(biāo),該下標(biāo)以。為基準(zhǔn)。

end_col

跨度的星束列(不包括該列)索引下標(biāo),該下標(biāo)以0為基準(zhǔn)。

函數(shù)GetCol和GetCols根據(jù)指定的列/列跨度返回

頭。GetCol是cvGetCols的縮寫(xiě)形式:

cvGetCol(arr,submat,col);〃~cvGetCols(arr,

submat,col,col+1);

GetDiag

返回一個(gè)數(shù)組對(duì)角線

CvMat*cvGetDiag(constCvArr*arr,CvMat*submat,

intdiag=0);

arr

輸入數(shù)組.

submat

指向結(jié)果子集的頭指針.

diag

數(shù)組對(duì)角線。0是主對(duì)角線,T是主對(duì)角線上面對(duì)角線,1是

主對(duì)角線下對(duì)角線,以此類(lèi)推。

函數(shù)cvGetDiag根據(jù)指定的diag參數(shù)返回?cái)?shù)組的對(duì)角

線頭。

GetSize

返回圖像或矩陣ROI大小

CvSizecvGetSize(constCvArr*arr);

arr

數(shù)組頭.

函數(shù)cvGetSize返回矩陣或圖像的行數(shù)和列數(shù),如果是

圖像就返回R0I的大小

InitSparseMatIterator

初始化稀疏數(shù)線元素迭代器

CvSparseNode*cvInitSparseMatlterator(const

CvSparseMat*mat,

CvSparseMatIterator*mat_iterator);

mat

輸入的數(shù)組.

mat_iterator

被初始日迭代器.

函數(shù)cvInitSparseMatlterator初始化稀疏數(shù)組元素

的迭代器并且返回指向第一個(gè)元素的指針,如果數(shù)組為

空則返回NULLo

GetNextSparseNode

初始化稀疏數(shù)線元素迭代器

CvSparseNode*

cvGetNextSparseNode(CvSparseMatIterator*

mat_iterator);

mat_iterator

稀疏數(shù)質(zhì)的迭代器

函數(shù)cvGetNextSparseNode移動(dòng)迭代器到下,?個(gè)稀疏矩

陣元素并返回指向他的指針。在當(dāng)前的版本不存在任何

元素的特殊順序,因?yàn)樵厥前碒ASH表存貯的下面的列

子描述怎樣在稀疏矩陣上迭代:

利用cvInitSparseMatIterator和

cvGetNextSparseNode計(jì)算浮點(diǎn)稀疏數(shù)組的和。

doublesum;

inti,dims=cvGetDims(array);

CvSparseMatIteratormatiterator;

CvSparseNode*node=

cvInitSparseMatlterator(array,&mat_iterator);

for(;node!=0;node=

cvGetNextSparseNode(&mat_iterator))

(

int*idx=CV_NODE_IDX(array,node);/*

getpointertotheelementindices*/

floatval=*(float*)CV_N0DE_VAL(array,

node);/*getvalueoftheelement

(assumethatthetypeisCV32FC1)*/

printf(〃(〃);

for(i=0;i<dims;i++)

printf(〃%4d%s〃,idx[i],i<dims-1

“J:”):〃);

printf(〃%g\n〃,val);

sum+=val;

}

printf(,?\nTotalsum=%g\n〃,sum);

GetElemType

返回?cái)?shù)組元素類(lèi)型

intcvGetElemType(constCvArr*arr);

arr

輸入數(shù)組.

函數(shù)GetElemType返回?cái)?shù)組元素類(lèi)型就像在

cvCreateMat中討論的一樣:

CV_8UC1...CV_64FC4

GetDims,GetDimSize

返回?cái)?shù)組維數(shù)和他們的大小或者殊維的大小

intcvGetDims(constCvArr*arr,int*sizes=NULL);

intcvGetDimSize(constCvArr*arr,intindex);

arr

輸入數(shù)組.

sizes

可選的輸出數(shù)組維尺寸向量,對(duì)于2D數(shù)組第一位是數(shù)組行數(shù)

(高),第二位是數(shù)組列數(shù)(寬)

index

以0為基準(zhǔn)的維索引下標(biāo)(對(duì)于矩陣0意味著行數(shù),1意味著

列數(shù),對(duì)于圖象0意味著高,1意味著寬。

函數(shù)cvGetDims返回維數(shù)和他們的大小。如果是

IplImage或CvMat總是返回2,不管圖像/矩陣行數(shù)。

函數(shù)cvGetDimSize返回特定的維大小(每維的元素

數(shù))。例如,接下來(lái)的代碼使用二種方法計(jì)算數(shù)組元素

總數(shù)。

//viacvGetDims()

intsizes[CV_MAX_DIM];

inti,total=1;

intdims=cvGetDims(arr,size);

for(i=0;i<dims;i++)

total*=sizes[i];

//viacvGetDims()andcvGetDimSize()

inti,total=1;

intdims=cvGetDims(arr);

for(i=0;i<dims;i++)

total*二cvGetDimsSize(arr,i);

Ptr*D

返回指向特殊數(shù)組元素的指針

uchar*cvPtrlD(constCvArr*arr,intidxO,int*

type=NULL);

uchar*cvPtr2D(constCvArr*arr,intidxO,intidxl,

int*type=NULL);

uchar*cvPtr3D(constCvArr*arr,intidxO,intidxl,

intidx2,int*type=NULL);

uchar*cvPtrND(constCvArr*arr,int*idx,int*

type=NULL,intcreate_node=l,unsigned*

precalc_hashval=NULL);

arr

輸入數(shù)組.

idxO

元素下標(biāo)的第一個(gè)以0為基準(zhǔn)的成員

idxl

元素下標(biāo)的第二個(gè)以0為基準(zhǔn)的成員

idx2

元素下標(biāo)的第三個(gè)以0為基準(zhǔn)的成員

idx

數(shù)組元素下標(biāo)

type

可選的,矩陣元素類(lèi)型輸出參數(shù)

create_node

可選的,為稀疏矩陣輸入的參數(shù)。如果這個(gè)參數(shù)非零就意味著

被需要的元素如果不存在就會(huì)被創(chuàng)建。

precalc__hashval

可選的,為稀疏矩陣設(shè)置的輸入?yún)?shù)。如果這個(gè)指針?lè)荖ULL,

函數(shù)不會(huì)重新計(jì)算節(jié)點(diǎn)的HASH值,而是從指定位置獲取。這

種方法有利于提高智能組合數(shù)據(jù)的操作(TODO:提供了一個(gè)例

子)

函數(shù)cvPlr*D返回指向特殊數(shù)組元素的指針。數(shù)組維數(shù)

應(yīng)該與轉(zhuǎn)遞給函數(shù)物下標(biāo)數(shù)相匹配,除了cvPtrlD函

數(shù),它可以被用于順序存取的ID,2D或nD密集數(shù)組

函數(shù)也可以用于稀疏數(shù)組,并且如果被需要的節(jié)點(diǎn)不存

在函數(shù)可以創(chuàng)建這個(gè)節(jié)點(diǎn)并設(shè)置為0

就像其它獲取數(shù)組元素的函數(shù)(cvGet[Real]*D,

cvSet[Real]*D)如果元素的下標(biāo)超出了范圍就會(huì)產(chǎn)生錯(cuò)

Get*D

返回特殊的數(shù)組元素

CvScal

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論