




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人工智能推動(dòng)智慧圖書(shū)館智能化升級(jí)的風(fēng)險(xiǎn)評(píng)估
- 爆破工程安全管理
- 傳統(tǒng)制造業(yè)數(shù)字化轉(zhuǎn)型:挑戰(zhàn)、路徑與意義探索
- BIM技術(shù)在裝配式建筑項(xiàng)目管理中的應(yīng)用與實(shí)踐
- 以“五感體驗(yàn)”為核心的主題餐廳室內(nèi)設(shè)計(jì)探究
- 市場(chǎng)營(yíng)銷(xiāo)策略研究
- 演出經(jīng)紀(jì)人崗位面試問(wèn)題及答案
- 飛盤(pán)高爾夫場(chǎng)地植被優(yōu)化-洞察闡釋
- 物聯(lián)網(wǎng)平臺(tái)下的知識(shí)圖譜構(gòu)建與應(yīng)用-洞察闡釋
- 電視節(jié)目制作課件:電視節(jié)目制作概況
- 第十七章其他熔化焊接與熱切割作業(yè)課件
- 金融學(xué) 曹龍騏 02教材課件
- 2022年混凝土攪拌站建設(shè)項(xiàng)目可行性研究報(bào)告
- 《覺(jué)醒年代》朗誦稿
- 2022年社會(huì)學(xué)概論考試重點(diǎn)廣東海洋
- 路基工程質(zhì)量通病及防治措施
- 福建省中小學(xué)教師職務(wù)考評(píng)登記表
- 北京市中級(jí)專(zhuān)業(yè)技術(shù)資格評(píng)審申報(bào)表
- 工廠供電課程設(shè)計(jì)1
- 鼠害蟲(chóng)害防治管理制度
- PLM_項(xiàng)目建議書(shū)_PTC
評(píng)論
0/150
提交評(píng)論