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

下載本文檔

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

文檔簡介

CXCORE參考手冊

HUNNISH注:

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

譯的,原文件是:

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

可以從SOURCEFORG上面的OpenCV項目卡載,也可以

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

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

pencv/chinesedocs/ref/opencvrefcxcore.htm。

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

解不透導(dǎo)致翻譯不準確或者錯誤,也請有心人賜教。

翻譯由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)計

O線性代數(shù)

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

O隨機數(shù)生成

。離散變換

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

O內(nèi)存存儲

O序列

olS

O圖

O機

?繪圖函數(shù)

o典線和形狀

oxi

0點集和輪廓

?數(shù)據(jù)保存和運行時類型信息樊臻韜

。文件存儲

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

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

O運行時類型信息和通用函數(shù)-

?其它混合函數(shù)

***

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

O錯誤處理

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

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

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

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

CvPoint

基于二維整形坐標軸的點

typedefstructCvPoint

(

intx;/*X坐標,通常以0為基點*/

inty;/*y坐標,通常以0為基點*/

)

CvPoint;

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

inlineCvPointcvPoint(intx,inty);

/*從CvPoint2D32f類型轉(zhuǎn)換得來*/

inlineCvPointcvPointFrom32f(CvPoint2D32f

point);

CvPoint2D32f

二維浮點坐標上的點

typedefstructCvPoint2D32f

floatx;/*X坐標,通常以0為基點*/

floaty;/*Y坐標,通常以0為基點*/

CvPoint2D32f;

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

inlineCvPoint2D32fcvPoint2D32f(doublex,

doubley);

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

inlineCvPoint2D32fcvPointTo32f(CvPoint

point);

CvPoint3D32f

三維浮點坐標上的點

typedefstructCvPoint3D32f

(

floatx;/*x-坐標,通?;?*/

floaty;/*y-坐標,通常基于0*/

floatz;/*z-坐標,通?;?*/

)

CvPoint3D32f;

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

inlineCvPoint3D32fcvPoint3D32f(doublex,

doubley,doublez);

CvSize

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

typedefstructCvSize

(

intwidth;/*矩形寬*/

intheight;/*矩形高*/

)

CvSize;

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

inlineCvSizecvSize(intwidth,intheight);

CvSize2D32f

以低像素精度標量矩形框大小

typedefstructCvSize2D32f

floatwidth;/*矩形寬*/

floatheight;/*矩形高*/

CvSize2D32f;

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

inlineCvSize2D32fcvSize2D32f(doublewidth,

doubleheight);

CvRect

矩形框的偏移和大小

typedefstructCvRect

(

intx;/*方形的最左角的x-坐標*/

inty;/*方形的最上或者最下角的y-坐標*/

intwidth;/*寬*/

intheight;/*高*/

)

CvRect;

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

inlineCvRectcvRect(intx,inty,intwidth,

intheight);

CvScalar

可存放在卜,2-,3-,4-TUPLE類型的捆綁數(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

迭代算法的終止標準

#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);

/*檢查終止標準并且轉(zhuǎn)換使

type=CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,并且滿足

max_iter和epsilon限制條件*/

CvTermCriteria

cvCheckTermCriteria(CvTermCriteriacriteria,

double

default_eps,

int

default_max_iters);

CvMat

多通道矩陣

tvpedefstructCvMat

(

inttype;/*CvMat標識(CV_MAT_MAGIC_VAL),

元素類型和標記*/

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

int*refcount;/*數(shù)據(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標識

(CV_MATND_MAGIC_VAL),元素類型和標號*/

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

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

union

uchar*ptr;

short*s;

int*i;

float*fl;

double*db;

}data;/*data指針*/

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

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

struct

(

intsize;

intstep;

)

dim[CV_MAX_DIM];

}CvMatND;

CvSparseMat

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

typedefstructCvSparseMat

inttype;/*CvSparseMat標識

(CV_SPARSE_MAT_MAGIC_VAL),元素類型和標號*/

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

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

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

void**hashtable;/*HASH表:每個入口有一

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

*/

inthashsize;/*HASH表大小*/

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

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

移*/

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

偏移*/

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

}CvSparseMat;

IplImage

IPL圖像頭

typedefstruct_IplImage

intnSize;/*IpHmage大小*/

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

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

支持1,2,3或4個通道*/

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-分開的顏色通道.

只有cvCreatelmage

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

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

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

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

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

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

intwidth;/*圖像寬像素數(shù)*/

intheight;/*圖像高像素數(shù)*/

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

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

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;/*指針指向一個不

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

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

IplImage;

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

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

一個子集:

?alpha通道在OpenCV中被忽略.

?colorModel和channelSeq被OpenCV忽略.OpenCV

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

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

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

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

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

.當widthStep被用于去接近圖像行序列,排列是被

OpenCV忽略的.

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

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

IPL他是1-bit.

.名字信息不支持.

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

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

代碼邊際模式.

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

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

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

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

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

CvArr

不確定數(shù)組

typedefvoidCvArr;

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

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

CvSeq*.最終的數(shù)組類型是在運行時通過分析數(shù)組頭的

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

數(shù)組操作

初始化

CreateImage

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

IplImage*cvCreatelmage(CvSizesize,intdepth,

intchannels);

size

圖像寬、高.

depth

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

IPL_DEPTH_8U-無符號8位整型

IPL_DEPTH_8s-有符號8位整型

IPL_DEPTH_16U-無符號16位整型

IPL_DEPTH_16S-有符號16位整型

IPL_DEPTH_32S,-有符號32位整型

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

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

channels

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

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

bOgOrOblglrl...

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

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

像.

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

列的縮寫型式

header=

cvCreatelmageHeader(size,depth,channels);

cvCreateData(header);

CreatelmageHeader

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

IplImage*cvCreatelmageHeader(CvSizesize,int

depth,intchannels);

size

圖像寬、高.

depth

像深(見Createlmage).

channels

通道數(shù)(見Createlmage).

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

Ipllmage結(jié)構(gòu).這個函數(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ù)不是作為默認的(見

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ù)不是作為默認的(見

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

像深(見Createlmage).

channels

通道數(shù)(見Createlmage).

origin

IPL_ORIGIN_TL或IPL_ORIGIN_BL.

align

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

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

戶指定的圖像并且返回這個指針。

Clonelmage

制作圖像的完整拷貝

IplImage*cvClonelmage(constIplImage*image);

image

原圖像.

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

數(shù)據(jù)

SetlmageCOI

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

voidcvSetlmageCOI(IplImage*image,intcoi);

image

圖像頭.

coi

感興趣通道.

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

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

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

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

種狀況當處理分離圖像/矩陣通道時,可以拷貝(通過

cvCopy號cvSplit)通道來分離圖像/矩陣,處理后如

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

來.

GetlmageCOI

返回感興趣通道號

intcvGetlmageCOI(constIplImage*image);

image

圖像頭.

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

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

SetlmageROI

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

voidcvSetlmageROI(IplImage*image,CvRectrect);

image

圖像頭.

rect

ROI矩形.

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

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

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

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

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

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

ResetlmageROI

釋放圖像的ROI

voidcvResetlmageROI(IplImage*image);

image

圖像頭.

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

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

辦法

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

image->height));

cvSetlmageCOI(image,0);

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

GetlmageROI

返回圖像的ROI坐標

CvRectcvGetlmageROI(constIplImage*image);

image

圖像頭.

函數(shù)cvGetlmageROI返回圖像ROI坐標.如果沒有ROI

則返回矩形值為

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

CreateMat

創(chuàng)建矩陣

CvMat*cvCreateMat(introws,intcols,inttype);

rows

矩陣行數(shù).

cols

矩陣列數(shù).

type

矩陣元素類型.通常以

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

例如:

CV_8UC1意思是一個8-bit無符號單通道矩陣,CV_32SC2意

思是一個32-bit有符號二個通道的矩陣.

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

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

縮寫型式:

CvMat*mat=cvCreateMatHeader(rows,cols,

type);

cvCreateData(mat);

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

CreateMatHeader

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

CvMat*cvCreateMatHeader(introws,intcols,int

type);

rows

矩陣行數(shù).

cols

矩陣列數(shù).

type

矩陣元素類型(見cvCreateMat).

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

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

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

ReleaseMat

刪除矩陣

voidcvReleaseMat(CvMat**mat);

mat

雙指針指向矩陣.

函數(shù)cvReleaseMat縮減矩陣數(shù)據(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

矩陣元素類型.

data

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

step

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

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

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

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

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

乘積.

計算兩個矩陣的積

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

元素類型(見CreateMat).

data

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

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

cvInitMatHeader.也就是說他相當于:

CvMatmat;

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

CV_AUTOSTEP);

CloneMat

創(chuàng)建矩陣拷貝

CvMat*cvCloneMat(constCvMat*mat);

mat

輸入矩陣.

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

該矩陣的指針.

CreateMatND

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

CvMatND*cvCreateMatND(intdims,constint*sizes,

inttype);

dims

數(shù)組維數(shù).但不許超過CV_MAX_DIM(默認=32,但這個默認值

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

sizes

數(shù)組的維大小.

type

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

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

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

形式:

CvMatND*mat=cvCreateMatNDHeader(dims,sizes,

type);

cvCreateData(mat);

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

CreateMatNDHeader

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

CvMatND*cvCreateMatNDHeader(intdims,constint*

sizes,inttype);

dims

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

sizes

維大小.

type

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

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

可以用cvCrcaleDala進一步的被分配或利用

cvSetData由用戶明確指定.

ReleaseMatND

刪除多維數(shù)組

voidcvReleaseMatND(CvMatND**mat);

mat

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

函數(shù)cvReleaseMatND縮減數(shù)組參考計數(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ù)組元素類型.與CvMat相同

data

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

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

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

CloneMatND

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

CvMatND*cvCloneMatND(constCvMatND*mat);

mat

輸入數(shù)組

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

DecRefData

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

voidcvDecRefData(CvArr*arr);

arr

數(shù)組頭.

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

計數(shù),如參考計數(shù)指針非Niii1年且計數(shù)到0就刪除數(shù)據(jù),

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

參考計算才會是非NULL,換句話說:

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

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

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

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

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

空。

IncRefData

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

intcvIncRefData(CvArr*arr);

arr

數(shù)組頭.

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

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

CreateData

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

voidcvCreateData(CvArr*arr);

arr

數(shù)組頭.

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

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

類型如果CV_TURN_ON_IPL_COMPATIBILITY沒有被調(diào)用也

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

ReleaseData

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

voidcvReleaseData(CvArr*arr);

arr

數(shù)組頭

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

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

個函數(shù)不能刪除外部數(shù)據(jù)。見cvCreateData.

SetData

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

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

arr

數(shù)組頭.

data

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

step

整行字節(jié)長.

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

用cvCreate*Header,cvInit*Header或cvMat(對于

矩陣)初始化過.

GetRawData

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

voidcvGetRawData(constCvArr*arr,uchar**data,

int*step=NULL,CvSize*

roi_size=NULL);

arr

數(shù)組頭.

data

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

step

輸出行字節(jié)長

roi_size

輸出ROI尺寸

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

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

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

回。

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

使用GetRawData計算單通道浮點數(shù)組的元素絕對值.

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)的指針,作為臨時緩存.

coi

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

allowND

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

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

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

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

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

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

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

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

頭結(jié)構(gòu)并且返回指向這個臨時結(jié)構(gòu)的指針。因為CvMat

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

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

Ipllmage和CvMat二種數(shù)據(jù)類型。這個函數(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ù)對于多通道平面編排圖像可以處

理每個平面。

GetImage

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

Ipllmage*cvGetlmage(constCvArr*arr,Ipllmage*

image_header);

arr

輸入數(shù)組.

image_header

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

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

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

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

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

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

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

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

CreateSparseMat

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

CvSparseMat*cvCreateSparseMat(intdims,const

int*sizes,inttype);

dims

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

(最多可達216).

sizes

數(shù)組的維大小.

type

數(shù)組元素類型,見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ù)組的拷貝并返回指

向這個拷貝的指針.

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

GetSubRect

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

CvMat*cvGetSubRect(constCvArr*arr,CvMat*

submat,CvRectrect);

arr

輸入數(shù)組

submat

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

header.

rect

以0坐標為基準的ROL

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

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

就像一個獨立的數(shù)組一樣進行處理。函數(shù)在處理時要考

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

GetRow,GetRows

返回數(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

被選定的行號下標,以0為基準.

start_row

跨度的開始行(包括此行)索引下標,以0為下標基準

end_row

跨度的寤束行(不包括此行)索引下標,以0為下標基準.

delta_row

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

行提取一行。

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

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

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

submat,row,row+1,1);

GetCol,GetCols

返回數(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

選定的列索引下標,該下標以0為基準。

start_col

跨度的開始列(包括該列)索引下標,該下標以。為基準。

end_col

跨度的星束列(不包括該列)索引下標,該下標以0為基準。

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

頭。GetCol是cvGetCols的縮寫形式:

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

submat,col,col+1);

GetDiag

返回一個數(shù)組對角線

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

intdiag=0);

arr

輸入數(shù)組.

submat

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

diag

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

主對角線下對角線,以此類推。

函數(shù)cvGetDiag根據(jù)指定的diag參數(shù)返回數(shù)組的對角

線頭。

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ù)組元素

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

空則返回NULLo

GetNextSparseNode

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

CvSparseNode*

cvGetNextSparseNode(CvSparseMatIterator*

mat_iterator);

mat_iterator

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

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

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

元素的特殊順序,因為元素是按HASH表存貯的下面的列

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

利用cvInitSparseMatIterator和

cvGetNextSparseNode計算浮點稀疏數(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

返回數(shù)組元素類型

intcvGetElemType(constCvArr*arr);

arr

輸入數(shù)組.

函數(shù)GetElemType返回數(shù)組元素類型就像在

cvCreateMat中討論的一樣:

CV_8UC1...CV_64FC4

GetDims,GetDimSize

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

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

intcvGetDimSize(constCvArr*arr,intindex);

arr

輸入數(shù)組.

sizes

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

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

index

以0為基準的維索引下標(對于矩陣0意味著行數(shù),1意味著

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

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

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

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

數(shù))。例如,接下來的代碼使用二種方法計算數(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

元素下標的第一個以0為基準的成員

idxl

元素下標的第二個以0為基準的成員

idx2

元素下標的第三個以0為基準的成員

idx

數(shù)組元素下標

type

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

create_node

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

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

precalc__hashval

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

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

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

子)

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

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

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

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

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

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

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

Get*D

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

CvScal

溫馨提示

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

評論

0/150

提交評論