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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

CXCORE參考手冊

HUNNISH注:

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

譯的,原文件是:

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

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

直接從阿須數碼中下載:

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

pencv/chinesedocs/ref/opencvrefcxcore.htm。

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

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

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

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

?基礎結構

?數組操作

O初始化

O獲取元素和數組素集

O拷貝和填充

O變換和置換

O算術、邏輯和比較

O統計

O線性代數

O數學函數

O隨機數生成

。離散變換

?動態(tài)結構

O內存存儲

O序列

olS

O圖

O機

?繪圖函數

o典線和形狀

oxi

0點集和輪廓

?數據保存和運行時類型信息樊臻韜

。文件存儲

O寫數據

O讀數據

O運行時類型信息和通用函數-

?其它混合函數

***

?錯誤處理和系統函數

O錯誤處理

O系統函數譚俊河

?依字母順序函數列表

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

基礎結構

CvPoint

基于二維整形坐標軸的點

typedefstructCvPoint

(

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

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

)

CvPoint;

/*構造函數*/

inlineCvPointcvPoint(intx,inty);

/*從CvPoint2D32f類型轉換得來*/

inlineCvPointcvPointFrom32f(CvPoint2D32f

point);

CvPoint2D32f

二維浮點坐標上的點

typedefstructCvPoint2D32f

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

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

CvPoint2D32f;

/*構造函數*/

inlineCvPoint2D32fcvPoint2D32f(doublex,

doubley);

/*從CvPoint轉換來*/

inlineCvPoint2D32fcvPointTo32f(CvPoint

point);

CvPoint3D32f

三維浮點坐標上的點

typedefstructCvPoint3D32f

(

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

floaty;/*y-坐標,通?;?*/

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

)

CvPoint3D32f;

/*構造函數*/

inlineCvPoint3D32fcvPoint3D32f(doublex,

doubley,doublez);

CvSize

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

typedefstructCvSize

(

intwidth;/*矩形寬*/

intheight;/*矩形高*/

)

CvSize;

/*構造函數*/

inlineCvSizecvSize(intwidth,intheight);

CvSize2D32f

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

typedefstructCvSize2D32f

floatwidth;/*矩形寬*/

floatheight;/*矩形高*/

CvSize2D32f;

/*構造函數*/

inlineCvSize2D32fcvSize2D32f(doublewidth,

doubleheight);

CvRect

矩形框的偏移和大小

typedefstructCvRect

(

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

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

intwidth;/*寬*/

intheight;/*高*/

)

CvRect;

/*構造函數*/

inlineCvRectcvRect(intx,inty,intwidth,

intheight);

CvScalar

可存放在卜,2-,3-,4-TUPLE類型的捆綁數據的容器

typedefstructCvScalar

(

doubleval[4]

)

CvScalar;

/*構造函數:用valO初始化val[0]用vail初始化

val[1]等等*/

inlineCvScalarcvScalar(doublevalO,double

val1=0,

doubleval2=0,

doubleval3=0);

/*構造函數:用val0123初始化val0123*/

inlineCvScalarcvScalarAll(doubleval0123);

/*構造函數:用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的聯合*/

intmax_iter;/*迭代的最大數*/

doubleepsilon;/*結果的精確性*/

)

CvTermCriteria;

/*構造函數*/

inlineCvTermCriteriaCvTermCriteria(inttype,

intmax_iter,doubleepsilon);

/*檢查終止標準并且轉換使

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é)為單位的行數據長度*/

int*refcount;/*數據參考計數*/

union

(

uchar*ptr;

short*s;

int*i;

float*fl;

double*db;

}data;/*data指針*/

Sifdef_cplusplus

union

(

introws;

intheight;

};

union

(

intcols;

intwidth;

);

ttelse

introws;/*行數*/

intcols;/*列數*/

Sendif

}CvMat;

CvMatND

多維、多通道密集數組

typedefstructCvMatND

(

inttype;/*CvMatND標識

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

intdims;/*數組維數*/

int*refcount;/*數據參考計數*/

union

uchar*ptr;

short*s;

int*i;

float*fl;

double*db;

}data;/*data指針*/

/*每維的數據結構(元素號,以字節(jié)為單位的

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

struct

(

intsize;

intstep;

)

dim[CV_MAX_DIM];

}CvMatND;

CvSparseMat

多維、多通道稀疏數組

typedefstructCvSparseMat

inttype;/*CvSparseMat標識

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

intdims;/*維數*/

int*refcount;/*參考數量-未用*/

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

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

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

*/

inthashsize;/*HASH表大小*/

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

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

移*/

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

偏移*/

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

}CvSparseMat;

IplImage

IPL圖像頭

typedefstruct_IplImage

intnSize;/*IpHmage大小*/

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

intnChannels;/*大多數OPENCV函數

支持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-頂一左結構,

1-底一左結構

(Windowsbitmaps風格)*/

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

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

intwidth;/*圖像寬像素數*/

intheight;/*圖像高像素數*/

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

該值非空只對該應域進行處理*/

struct_IplImage*maskR0I;/*在OpenCV中

必須置NULL*/

void*imageld;/*同上*/

struct_IplTilelnfo*tilelnfo;/*同上*/

intimageSize;/*圖像數據大?。ㄔ诮?/p>

叉存取格式下

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

字節(jié)*/

char*imageData;/*指向排列的圖像數據

*/

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

字節(jié)為單位*/

intBorderMode[4];/*邊際結束模式,被

OpenCV忽略*/

intBorderConst[4];/*同上*/

char*imageDataOrigin;/*指針指向一個不

同的圖像數據結構(不是必須排列的),是為了糾正圖

像內存分配準備的*/

IplImage;

IpHmage結構來自于IntelImageProcessing

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

一個子集:

?alpha通道在OpenCV中被忽略.

?colorModel和channelSeq被OpenCV忽略.OpenCV

顏色轉換的唯一個函數cvCvlColor把原圖像的

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

?數據順序必須是IPL_DATA_ORDER_PIXEL(顏色通道

是交叉存?。欢矫鎴D像的被選擇通道可以

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

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

OpenCV忽略的.

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

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

IPL他是1-bit.

.名字信息不支持.

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

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

代碼邊際模式.

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

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

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

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

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

CvArr

不確定數組

typedefvoidCvArr;

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

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

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

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

數組操作

初始化

CreateImage

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

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-單精度浮點數

IPL_DEPTH_64F'-雙精度浮點數

channels

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

存取的,例如通常的彩色圖像數據排列是:

bOgOrOblglrl...

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

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

像.

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

列的縮寫型式

header=

cvCreatelmageHeader(size,depth,channels);

cvCreateData(header);

CreatelmageHeader

分配,初始化,并且返回Ipl工mage結構

IplImage*cvCreatelmageHeader(CvSizesize,int

depth,intchannels);

size

圖像寬、高.

depth

像深(見Createlmage).

channels

通道數(見Createlmage).

函數cvCreatelmageHeader分配,初始化,并且返回

Ipllmage結構.這個函數相似于:

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

CV_TURN_ON_IPL_COMPATIBILITY宏)

ReleaselmageHeader

釋放頭

voidcvReleaselmageHeader(Ipllmage**image);

image

雙指針指向頭內存分配單元.

函數cvReleaselmageHeader釋放頭.相似于

if(image)

(

iplDeallocate(*image,IPL_IMAGEHEADER|

IPL_IMAGE_ROI);

*image=0;

)

然而IPL函數不是作為默認的(見

CV_TURN_ON_IPL_COMPATIBILITY宏)

Releaselmage

釋放頭和圖像數據

voidcvReleaselmage(IplImage**image);

image

雙指針指向圖像內存分配單元。

函數cvReleaselmage釋放頭和圖像數據,相似于:

if(*image)

(

cvReleaseData(*image);

cvReleaselmageHeader(image);

)

InitlmageHeader

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

IplImage*cvInitlmageHeader(IplImage*image,

CvSizesize,intdepth,

intchannels,int

origin=0,intalign=4);

image

被初始化的圖像頭.

size

圖像的寬高.

depth

像深(見Createlmage).

channels

通道數(見Createlmage).

origin

IPL_ORIGIN_TL或IPL_ORIGIN_BL.

align

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

函數cvInitlmageHeader初始他圖像頭結構,指向用

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

Clonelmage

制作圖像的完整拷貝

IplImage*cvClonelmage(constIplImage*image);

image

原圖像.

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

數據

SetlmageCOI

基于給定的值設置感興趣通道

voidcvSetlmageCOI(IplImage*image,intcoi);

image

圖像頭.

coi

感興趣通道.

函數cvSetlmageCOI基于給定的值設置感興趣的通道。

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

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

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

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

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

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

來.

GetlmageCOI

返回感興趣通道號

intcvGetlmageCOI(constIplImage*image);

image

圖像頭.

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

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

SetlmageROI

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

voidcvSetlmageROI(IplImage*image,CvRectrect);

image

圖像頭.

rect

ROI矩形.

函數cvSellmageROI基于給定的矩形設置圖像的R0I

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

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

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

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

(基于圖像的結構)計算。

ResetlmageROI

釋放圖像的ROI

voidcvResetlmageROI(IplImage*image);

image

圖像頭.

函數cvResetlmageROI釋放圖像ROI.釋放之后整個

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

辦法

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

image->height));

cvSetlmageCOI(image,0);

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

GetlmageROI

返回圖像的ROI坐標

CvRectcvGetlmageROI(constIplImage*image);

image

圖像頭.

函數cvGetlmageROI返回圖像ROI坐標.如果沒有ROI

則返回矩形值為

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

CreateMat

創(chuàng)建矩陣

CvMat*cvCreateMat(introws,intcols,inttype);

rows

矩陣行數.

cols

矩陣列數.

type

矩陣元素類型.通常以

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

例如:

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

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

函數cvCreateMat為新的矩陣分配頭和下面的數據,

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

縮寫型式:

CvMat*mat=cvCreateMatHeader(rows,cols,

type);

cvCreateData(mat);

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

CreateMatHeader

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

CvMat*cvCreateMatHeader(introws,intcols,int

type);

rows

矩陣行數.

cols

矩陣列數.

type

矩陣元素類型(見cvCreateMat).

函數cvCreateMatHeader分配新的矩陣頭并且返回指

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

cvCreateData或通過cvSetData明確的分配數據.

ReleaseMat

刪除矩陣

voidcvReleaseMat(CvMat**mat);

mat

雙指針指向矩陣.

函數cvReleaseMat縮減矩陣數據參考計數并且釋放矩

陣頭:

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

矩陣的行數.

cols

矩陣的列數.

type

矩陣元素類型.

data

可選的,將指向數據指針分配給矩陣頭.

step

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

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

函數cvInitMatHeader初始化已經分配了的CvMat結

構.它可以被Open以矩陣函數用于處理原始數據。

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

乘積.

計算兩個矩陣的積

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數組存貯a(3x4)和b(4x3)矩陣的積

Mat

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

CvMatcvMat(introws,intcols,inttype,void*

data=NULL);

rows

矩陣行數

cols

列數.

type

元素類型(見CreateMat).

data

可選的分配給矩陣頭的數據指針.

函數cvMal是個一快速內連函數,替代函數

cvInitMatHeader.也就是說他相當于:

CvMatmat;

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

CV_AUTOSTEP);

CloneMat

創(chuàng)建矩陣拷貝

CvMat*cvCloneMat(constCvMat*mat);

mat

輸入矩陣.

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

該矩陣的指針.

CreateMatND

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

CvMatND*cvCreateMatND(intdims,constint*sizes,

inttype);

dims

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

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

sizes

數組的維大小.

type

數組元素類型.與CvMat相同

函數cvCreateMatND分配頭給多維密集數組并且分配下

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

形式:

CvMatND*mat=cvCreateMatNDHeader(dims,sizes,

type);

cvCreateData(mat);

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

CreateMatNDHeader

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

CvMatND*cvCreateMatNDHeader(intdims,constint*

sizes,inttype);

dims

數組維數.

sizes

維大小.

type

數組元素類型.與CvMat相同

函數cvCreateMatND分配頭給多維密集數組。數組數據

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

cvSetData由用戶明確指定.

ReleaseMatND

刪除多維數組

voidcvReleaseMatND(CvMatND**mat);

mat

指向數組的雙指針.

函數cvReleaseMatND縮減數組參考計數并釋放數組

頭:

if(*mat)

cvDecRefData(*mat);

cvFree((void**)mat);

InitMatNDHeader

初始化多維數組頭

CvMatND*cvlnitMatNDHeader(CvMatND*mat,intdims,

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

mat

指向要被出初始化的數組頭指針.

dims

數組維數.

sizes

維大小.

type

數組元素類型.與CvMat相同

data

可選的分配給矩陣頭的數據指針.

函數cvlnitMatNDHeader初始化用戶指派的CvMatND

結構.

CloneMatND

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

CvMatND*cvCloneMatND(constCvMatND*mat);

mat

輸入數組

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

DecRefData

縮減數組數據的參考計數

voidcvDecRefData(CvArr*arr);

arr

數組頭.

函數cvDecRefDala縮減函數I或Cv函數D數據的參考

計數,如參考計數指針非Niii1年且計數到0就刪除數據,

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

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

使用cvSelDala指派外部數據給頭

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

矩陣頭是從圖像頭或N維矩陣頭轉換過來的。

參考計數如果被設置成NULL就不會被縮減.無論數據是

否被刪除,數據指針和參考計數指針都將被這個函數清

空。

IncRefData

增加數組數據的參考計數

intcvIncRefData(CvArr*arr);

arr

數組頭.

函數cvIncRefData增加CvMat或CvMatND數據參考

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

CreateData

分配數組數據

voidcvCreateData(CvArr*arr);

arr

數組頭.

函數cvCreateData分配圖像,矩陣或多維數組數據.

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

類型如果CV_TURN_ON_IPL_COMPATIBILITY沒有被調用也

是可以使用這種方法M反之使用IPL函數分配數據

ReleaseData

釋放數組數據

voidcvReleaseData(CvArr*arr);

arr

數組頭

函數cvReleaseData釋放數組數據.對于CvMat或

CvMatND結構只需調用cvDecRefDataO,也就是說這

個函數不能刪除外部數據。見cvCreateData.

SetData

指派用戶數據給數組頭

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

arr

數組頭.

data

用戶數據.

step

整行字節(jié)長.

函數cvSetData指派用記數據給數組頭.頭應該已經使

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

矩陣)初始化過.

GetRawData

返回組數的底層信息

voidcvGetRawData(constCvArr*arr,uchar**data,

int*step=NULL,CvSize*

roi_size=NULL);

arr

數組頭.

data

輸出指針,指針指向整個圖像的結構或ROI

step

輸出行字節(jié)長

roi_size

輸出ROI尺寸

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

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

如果數組是設置了ROI的IplImage結構,ROI參數被返

回。

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

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

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

從不確定數組返回矩陣頭

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

int*coi=NULL,intallowND=0);

arr

輸入數組.

header

指向CvMat結構的指針,作為臨時緩存.

coi

可選的輸出參數,用于輸出C0I.

allowND

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

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

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

函數cvGetMat從輸入的數組生成矩陣頭,輸入的數組可

以是-CvMat結構,Ipllmage結構或多維密集數組

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

如果是矩陣函數只是返回指向矩陣的指針.如果是

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

頭結構并且返回指向這個臨時結構的指針。因為CvMat

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

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

Ipllmage和CvMat二種數據類型。這個函數的反向轉換

可以用cvGetlmage將CvMat轉換成Ipllmage.

輸入的數組必須有已分配好的底層數據或附加的數據,

否則該函數將調用失敗

如果輸入的數組是Ipllmage格式,使用平面式數據編排

并設置了C0L函數返回的指針指向被選定的平面并設置

C0I=0.利用OPENCV函數對于多通道平面編排圖像可以處

理每個平面。

GetImage

從不確定數組返回圖像頭

Ipllmage*cvGetlmage(constCvArr*arr,Ipllmage*

image_header);

arr

輸入數組.

image_header

指向Ipllmage結構的指針,該結構存貯在一個臨時緩存.

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

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

只是返回輸入參數的指針,如是查CvMat*函數用輸入

參數矩陣初始化圖像頭。因此如果我們把Ipllmage轉

換成CvMat然后再轉換CvMat回Ipllmage,如果R0I

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

像跨度的IPL函數就會失敗。

CreateSparseMat

創(chuàng)建稀疏數組

CvSparseMat*cvCreateSparseMat(intdims,const

int*sizes,inttype);

dims

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

(最多可達216).

sizes

數組的維大小.

type

數組元素類型,見CvMat

函數cvCreateSparseMat分配多維稀疏數組.

Initiallythearraycontainnoelements,thatis

cvGet*DorcvGetReal*Dreturnzeroforeveryindex

ReleaseSparseMat

刪除稀疏數組

voidcvReleaseSparseMat(CvSparseMat**mat);

mat

雙指針指向數組。

函數cvReleaseSparseMat釋放稀疏數組并清空數組指

CloneSparseMat

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

CvSparseMat*cvCloneSparseMat(constCvSparseMat*

mat);

mat

輸放的數組。

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

向這個拷貝的指針.

獲取元素和數組子集

GetSubRect

根據輸入的圖像或矩陣的矩形數組子集返回矩陣頭

CvMat*cvGetSubRect(constCvArr*arr,CvMat*

submat,CvRectrect);

arr

輸入數組

submat

指針指向結果數組頭Pointertotheresultantsub-array

header.

rect

以0坐標為基準的ROL

函數cvGe屈ubRect根據指定的數組矩形返回矩陣頭,

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

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

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

GetRow,GetRows

返回數組的行或在一定跨度內的行

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

introw);

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

intstart_row,intend_row,intdelta_row=l);

arr

輸入數組.

submat

指向返回的子數組頭的指針.

row

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

start_row

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

end_row

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

delta_row

在跨度內向索引下標跨步,從開始行到結束行每隔delta_row

行提取一行。

函數GetRow和GetRows根據指定的行或跨度從輸入數

組中返回對應的頭。GetRow是cvGelRows的縮寫:

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

submat,row,row+1,1);

GetCol,GetCols

返回數組的列或一定跨度內的列

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

intcol);

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

intstart_col,intend_col);

arr

輸入數組

submat

指向結果子數組頭指針.

col

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

start_col

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

end_col

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

函數GetCol和GetCols根據指定的列/列跨度返回

頭。GetCol是cvGetCols的縮寫形式:

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

submat,col,col+1);

GetDiag

返回一個數組對角線

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

intdiag=0);

arr

輸入數組.

submat

指向結果子集的頭指針.

diag

數組對角線。0是主對角線,T是主對角線上面對角線,1是

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

函數cvGetDiag根據指定的diag參數返回數組的對角

線頭。

GetSize

返回圖像或矩陣ROI大小

CvSizecvGetSize(constCvArr*arr);

arr

數組頭.

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

圖像就返回R0I的大小

InitSparseMatIterator

初始化稀疏數線元素迭代器

CvSparseNode*cvInitSparseMatlterator(const

CvSparseMat*mat,

CvSparseMatIterator*mat_iterator);

mat

輸入的數組.

mat_iterator

被初始日迭代器.

函數cvInitSparseMatlterator初始化稀疏數組元素

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

空則返回NULLo

GetNextSparseNode

初始化稀疏數線元素迭代器

CvSparseNode*

cvGetNextSparseNode(CvSparseMatIterator*

mat_iterator);

mat_iterator

稀疏數質的迭代器

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

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

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

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

利用cvInitSparseMatIterator和

cvGetNextSparseNode計算浮點稀疏數組的和。

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

返回數組元素類型

intcvGetElemType(constCvArr*arr);

arr

輸入數組.

函數GetElemType返回數組元素類型就像在

cvCreateMat中討論的一樣:

CV_8UC1...CV_64FC4

GetDims,GetDimSize

返回數組維數和他們的大小或者殊維的大小

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

intcvGetDimSize(constCvArr*arr,intindex);

arr

輸入數組.

sizes

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

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

index

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

列數,對于圖象0意味著高,1意味著寬。

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

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

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

數)。例如,接下來的代碼使用二種方法計算數組元素

總數。

//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

返回指向特殊數組元素的指針

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

輸入數組.

idxO

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

idxl

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

idx2

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

idx

數組元素下標

type

可選的,矩陣元素類型輸出參數

create_node

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

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

precalc__hashval

可選的,為稀疏矩陣設置的輸入參數。如果這個指針非NULL,

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

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

子)

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

應該與轉遞給函數物下標數相匹配,除了cvPtrlD函

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

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

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

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

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

Get*D

返回特殊的數組元素

CvScal

溫馨提示

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

評論

0/150

提交評論