版權(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-坐標,通?;?*/
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ū)域.當(dāng)
該值非空只對該應(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(顏色通道
是交叉存?。欢矫鎴D像的被選擇通道可以
被處理,就像C0I(感興趣的通道)被設(shè)置過一樣.
.當(dāng)widthStep被用于去接近圖像行序列,排列是被
OpenCV忽略的.
?不支持maskROI.處理MASK的函數(shù)把他當(dāng)作一個分
離的參數(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,對于這
種狀況當(dāng)處理分離圖像/矩陣通道時,可以拷貝(通過
cvCopy號cvSplit)通道來分離圖像/矩陣,處理后如
果需要可再拷貝(通過cvCopy或cvCvlPlaneToPix)回
來.
GetlmageCOI
返回感興趣通道號
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的值
不等于整個圖像,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.也就是說他相當(dāng)于:
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ù),
在當(dāng)前的執(zhí)行中只有當(dāng)數(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矩陣(當(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)并且返回指向這個臨時結(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移動迭代器到下,?個稀疏矩
陣元素并返回指向他的指針。在當(dāng)前的版本不存在任何
元素的特殊順序,因為元素是按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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 口譯就餐對話演示
- 企業(yè)標準的編寫合同5篇
- 二零二五年度智能車庫使用權(quán)出售及管理服務(wù)合同3篇
- 二零二五版2025年度情感修復(fù)協(xié)議書-自愿離婚調(diào)解合同3篇
- 2025版共享用工社會保險繳納協(xié)議范本3篇
- 設(shè)備維護保養(yǎng)培訓(xùn)教學(xué)案例
- 中考題型連連看近3年幻燈片課件
- 第8課現(xiàn)代文學(xué)和美術(shù)教學(xué)文案
- 電腦操作會考電腦2001-2002上課講義
- 二零二五年茶葉市場推廣合作合同2篇
- 礦石運輸與堆放技術(shù)
- 學(xué)校安全存在的問題及整改措施
- 2024-2025年江蘇專轉(zhuǎn)本英語歷年真題(含答案)
- 紅色中國風(fēng)蛇年晚會豎版邀請函
- 電力線路遷改工程方案
- 六年級下冊語文試卷-《14 文言文二則》一課一練(含答案)人教部編版
- 酒店求購收購方案
- 工程建設(shè)法規(guī)與案例 第3版 課件全套 劉黎虹第1-11章 建設(shè)法規(guī)概述-建設(shè)工程糾紛解決及法律責(zé)任
- 工商企業(yè)管理畢業(yè)論文范文(4篇)
- 《2024版 CSCO非小細胞肺癌診療指南》解讀 2
- 化工企業(yè)安全操作規(guī)程
評論
0/150
提交評論