版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
CXCORE參考手冊(cè)
HUNNISH注:
本翻譯是直接根據(jù)OpenCVBeta4.0版本的用戶手冊(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ù)語和原文語義理
解不透導(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í)類型信息樊臻韜
。文件存儲(chǔ)
O寫數(shù)據(jù)
O讀數(shù)據(jù)
O運(yùn)行時(shí)類型信息和通用函數(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類型轉(zhuǎn)換得來*/
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)換來*/
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類型的捆綁數(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,并且滿足
max_iter和epsilon限制條件*/
CvTermCriteria
cvCheckTermCriteria(CvTermCriteriacriteria,
double
default_eps,
int
default_max_iters);
CvMat
多通道矩陣
tvpedefstructCvMat
(
inttype;/*CvMat標(biāo)識(shí)(CV_MAT_MAGIC_VAL),
元素類型和標(biāo)記*/
intstep;/*以字節(jié)為單位的行數(shù)據(jù)長度*/
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),元素類型和標(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),元素類型和標(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-分開的顏色通道.
只有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)來自于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è)置過一樣.
.當(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ù)組類型可以不止一個(gè),如Ipllmage*,CvMat*甚至
CvSeq*.最終的數(shù)組類型是在運(yùn)行時(shí)通過分析數(shù)組頭的
前4個(gè)字節(jié)判斷。
數(shù)組操作
初始化
CreateImage
創(chuàng)建頭并分配數(shù)據(jù)
IplImage*cvCreatelmage(CvSizesize,intdepth,
intchannels);
size
圖像寬、高.
depth
圖像元素的位深度,可以是下面的其中之一:
IPL_DEPTH_8U-無符號(hào)8位整型
IPL_DEPTH_8s-有符號(hào)8位整型
IPL_DEPTH_16U-無符號(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ù)是下
列的縮寫型式
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).這個(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)的(見
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)的(見
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),指向用
戶指定的圖像并且返回這個(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í),可以拷貝(通過
cvCopy號(hào)cvSplit)通道來分離圖像/矩陣,處理后如
果需要可再拷貝(通過cvCopy或cvCvlPlaneToPix)回
來.
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é)果可以通過下述
辦法
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).如果沒有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意思是一個(gè)8-bit無符號(hào)單通道矩陣,CV_32SC2意
思是一個(gè)32-bit有符號(hào)二個(gè)通道的矩陣.
函數(shù)cvCreateMat為新的矩陣分配頭和下面的數(shù)據(jù),
并且返回一個(gè)指向新創(chuàng)建的矩陣的指針.是下列操作的
縮寫型式:
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
矩陣元素類型(見cvCreateMat).
函數(shù)cvCreateMatHeader分配新的矩陣頭并且返回指
向它的指針.矩陣數(shù)據(jù)可被進(jìn)一步的分配,使用
cvCreateData或通過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
矩陣元素類型.
data
可選的,將指向數(shù)據(jù)指針分配給矩陣頭.
step
排列后的數(shù)據(jù)的整個(gè)行寬,默認(rèn)狀態(tài)下,使用STEP的最小可
能值。例如假定矩陣的行與行之間無隙
函數(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
元素類型(見CreateMat).
data
可選的分配給矩陣頭的數(shù)據(jù)指針.
函數(shù)cvMal是個(gè)一快速內(nèi)連函數(shù),替代函數(shù)
cvInitMatHeader.也就是說他相當(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ù).但不許超過CV_MAX_DIM(默認(rèn)=32,但這個(gè)默認(rèn)值
可能在編譯時(shí)被改變)的定義
sizes
數(shù)組的維大小.
type
數(shù)組元素類型.與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ù)組元素類型.與CvMat相同
函數(shù)cvCreateMatND分配頭給多維密集數(shù)組。數(shù)組數(shù)據(jù)
可以用cvCrcaleDala進(jìn)一步的被分配或利用
cvSetData由用戶明確指定.
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ù)組元素類型.與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ù)的參考計(jì)數(shù)
voidcvDecRefData(CvArr*arr);
arr
數(shù)組頭.
函數(shù)cvDecRefDala縮減函數(shù)I或Cv函數(shù)D數(shù)據(jù)的參考
計(jì)數(shù),如參考計(jì)數(shù)指針非Niii1年且計(jì)數(shù)到0就刪除數(shù)據(jù),
在當(dāng)前的執(zhí)行中只有當(dāng)數(shù)據(jù)是用cvCrealeData分配的
參考計(jì)算才會(huì)是非NULL,換句話說:
使用cvSelDala指派外部數(shù)據(jù)給頭
矩陣頭代表部分大的矩陣或圖像
矩陣頭是從圖像頭或N維矩陣頭轉(zhuǎn)換過來的。
參考計(jì)數(shù)如果被設(shè)置成NULL就不會(huì)被縮減.無論數(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ì)于矩陣類型使用OpenCV的分配函數(shù),對(duì)于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ù).對(duì)于CvMat或
CvMatND結(jié)構(gòu)只需調(diào)用cvDecRefDataO,也就是說這
個(gè)函數(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(對(duì)于
矩陣)初始化過.
GetRawData
返回組數(shù)的底層信息
voidcvGetRawData(constCvArr*arr,uchar**data,
int*step=NULL,CvSize*
roi_size=NULL);
arr
數(shù)組頭.
data
輸出指針,指針指向整個(gè)圖像的結(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計(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è)簡單的方法,用同一代碼處理
Ipllmage和CvMat二種數(shù)據(jù)類型。這個(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è)置過了我們可能會(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ù)組元素類型,見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ù)組矩形返回矩陣頭,
換句話說,函數(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
跨度的開始行(包括此行)索引下標(biāo),以0為下標(biāo)基準(zhǔn)
end_row
跨度的寤束行(不包括此行)索引下標(biāo),以0為下標(biāo)基準(zhǔn).
delta_row
在跨度內(nèi)向索引下標(biāo)跨步,從開始行到結(jié)束行每隔delta_row
行提取一行。
函數(shù)GetRow和GetRows根據(jù)指定的行或跨度從輸入數(shù)
組中返回對(duì)應(yīng)的頭。GetRow是cvGelRows的縮寫:
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
跨度的開始列(包括該列)索引下標(biāo),該下標(biāo)以。為基準(zhǔn)。
end_col
跨度的星束列(不包括該列)索引下標(biāo),該下標(biāo)以0為基準(zhǔn)。
函數(shù)GetCol和GetCols根據(jù)指定的列/列跨度返回
頭。GetCol是cvGetCols的縮寫形式:
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ì)角線,以此類推。
函數(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ù)組元素類型
intcvGetElemType(constCvArr*arr);
arr
輸入數(shù)組.
函數(shù)GetElemType返回?cái)?shù)組元素類型就像在
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ù))。例如,接下來的代碼使用二種方法計(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
可選的,矩陣元素類型輸出參數(shù)
create_node
可選的,為稀疏矩陣輸入的參數(shù)。如果這個(gè)參數(shù)非零就意味著
被需要的元素如果不存在就會(huì)被創(chuàng)建。
precalc__hashval
可選的,為稀疏矩陣設(shè)置的輸入?yún)?shù)。如果這個(gè)指針非NULL,
函數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度外聘保安人員安全教育與培訓(xùn)合同
- 2025年科技園區(qū)建設(shè)尾款支付及設(shè)施移交合同3篇
- 2025年度貼磚勞務(wù)分包合同風(fēng)險(xiǎn)評(píng)估與管理
- 2025年個(gè)人教育設(shè)備租賃服務(wù)合同4篇
- 2025年度智能門禁系統(tǒng)租賃及維護(hù)服務(wù)合同3篇
- 二零二五年度倉儲(chǔ)設(shè)施租賃與倉儲(chǔ)信息化服務(wù)合同3篇
- 2025年度高速公路養(yǎng)護(hù)管理服務(wù)合同范本4篇
- 2025年度大型空飄球活動(dòng)租賃及現(xiàn)場布置合同2篇
- 二零二五年度挖機(jī)設(shè)備租賃合同售后服務(wù)追加協(xié)議
- 2025版空運(yùn)出口貨物運(yùn)輸代理服務(wù)合同范本3篇
- 《電力用直流電源系統(tǒng)蓄電池組遠(yuǎn)程充放電技術(shù)規(guī)范》
- 《哪吒之魔童降世》中的哪吒形象分析
- 信息化運(yùn)維服務(wù)信息化運(yùn)維方案
- 汽車修理廠員工守則
- 六年級(jí)上冊(cè)數(shù)學(xué)應(yīng)用題100題
- 個(gè)人代賣協(xié)議
- 公安交通管理行政處罰決定書式樣
- 10.《運(yùn)動(dòng)技能學(xué)習(xí)與控制》李強(qiáng)
- 冀教版數(shù)學(xué)七年級(jí)下冊(cè)綜合訓(xùn)練100題含答案
- 1神經(jīng)外科分級(jí)護(hù)理制度
- 場館惡劣天氣處置應(yīng)急預(yù)案
評(píng)論
0/150
提交評(píng)論