?? cxcore reference manual.htm
字號:
***************************************************************************************** --><!-- <hr><h2><a name="ch1_array_structs">Array structures</a></h2> -->
<HR>
<H3><A name=decl_CvMat>CvMat</A></H3>
<P class=Blurb>多通道矩陣</P><PRE> typedef struct CvMat
{
int type; /* CvMat 標識 (CV_MAT_MAGIC_VAL), 元素類型和標記 */
int step; /* 以字節為單位的行數據長度*/
int* refcount; /* 數據參考計數 */
union
{
uchar* ptr;
short* s;
int* i;
float* fl;
double* db;
} data; /* data 指針 */
#ifdef __cplusplus
union
{
int rows;
int height;
};
union
{
int cols;
int width;
};
#else
int rows; /* 行數 */
int cols; /* 列數*/
#endif
} CvMat;
</PRE>
<HR>
<H3><A name=decl_CvMatND>CvMatND</A></H3>
<P class=Blurb>多維、多通道密集數組</P><PRE> typedef struct CvMatND
{
int type; /* CvMatND 標識(CV_MATND_MAGIC_VAL), 元素類型和標號*/
int dims; /* 數組維數 */
int* refcount; /* 數據參考計數 */
union
{
uchar* ptr;
short* s;
int* i;
float* fl;
double* db;
} data; /* data 指針*/
/* 每維的數據結構 (元素號,以字節為單位的元素之間的距離)是配套定義的 */
struct
{
int size;
int step;
}
dim[CV_MAX_DIM];
} CvMatND;
</PRE>
<HR>
<H3><A name=decl_CvSparseMat>CvSparseMat</A></H3>
<P class=Blurb>多維、多通道稀疏數組</P><PRE> typedef struct CvSparseMat
{
int type; /* CvSparseMat 標識 (CV_SPARSE_MAT_MAGIC_VAL), 元素類型和標號 */
int dims; /* 維數 */
int* refcount; /* 參考數量 - 未用 */
struct CvSet* heap; /* HASH表節點池 */
void** hashtable; /* HASH表:每個入口有一個節點列表,有相同的 "以HASH大小為模板的HASH值" */
int hashsize; /* HASH表大小 */
int total; /* 稀疏數組的節點數 */
int valoffset; /* 數組節點值在字節中的偏移 */
int idxoffset; /* 數組節點索引在字節中的偏移 */
int size[CV_MAX_DIM]; /*維大小 */
} CvSparseMat;
</PRE>
<HR>
<H3><A name=decl_IplImage>IplImage</A></H3>
<P class=Blurb>IPL 圖像頭</P><PRE> typedef struct _IplImage
{
int nSize; /* IplImage大小 */
int ID; /* 版本 (=0)*/
int nChannels; /* 大多數OPENCV函數支持1,2,3 或 4 個通道 */
int alphaChannel; /* 被OpenCV忽略 */
int depth; /* 像素的位深度: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U,
IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F 可支持 */
char colorModel[4]; /* 被OpenCV忽略 */
char channelSeq[4]; /* 同上 */
int dataOrder; /* 0 - 交叉存取顏色通道, 1 - 分開的顏色通道.
只有cvCreateImage可以創建交叉存取圖像 */
int origin; /* 0 - 頂—左結構,
1 - 底—左結構 (Windows bitmaps 風格) */
int align; /* 圖像行排列 (4 or 8). OpenCV 忽略它,使用 widthStep 代替 */
int width; /* 圖像寬像素數 */
int height; /* 圖像高像素數*/
struct _IplROI *roi;/* 圖像感興趣區域. 當該值非空只對該區域進行處理 */
struct _IplImage *maskROI; /* 在 OpenCV中必須置NULL */
void *imageId; /* 同上*/
struct _IplTileInfo *tileInfo; /*同上*/
int imageSize; /* 圖像數據大小(在交叉存取格式下imageSize=image->height*image->widthStep),單位字節*/
char *imageData; /* 指向排列的圖像數據 */
int widthStep; /* 排列的圖像行大小,以字節為單位 */
int BorderMode[4]; /* 邊際結束模式, 被OpenCV忽略 */
int BorderConst[4]; /* 同上 */
char *imageDataOrigin; /* 指針指向一個不同的圖像數據結構(不是必須排列的),是為了糾正圖像內存分配準備的 */
}
IplImage;
</PRE>
<P> <CODE>IplImage結構來自于</CODE> <EM>Intel Image Processing
Library(是其本身所具有的)</EM>. OpenCV 只支持其中的一個子集:
<UL>
<LI><CODE>alpha通道在</CODE> OpenCV中被忽略.
<LI><CODE>colorModel</CODE> 和<CODE>channelSeq</CODE> 被OpenCV忽略. OpenCV顏色轉換的
唯一個函數 <A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_cvCvtColor">cvCvtColor</A>把原圖像的顏色空間的目標圖像的顏色空間作為一個參數.
<LI><CODE>數據順序</CODE> 必須是IPL_DATA_ORDER_PIXEL (顏色通道是交叉存取),
然面平面圖像的被選擇通道可以被處理,就像COI(感興趣的通道)被設置過一樣.
<LI>當 <CODE>widthStep</CODE> 被用于去接近圖像行序列,排列是被OpenCV忽略的.
<LI><CODE>不支持maskROI</CODE> . 處理MASK的函數把他當作一個分離的參數. MASK在 OpenCV 里是 8-bit, 然而在
IPL他是 1-bit.
<LI>名字信息不支持.
<LI><CODE>邊際模式和邊際常量是不支持的</CODE>. 每個 OpenCV 函數處理像素的鄰近的像素,通常使用單一的固定代碼邊際模式.
</LI></UL>除了上述限制, OpenCV處理ROI有不同的要求.要求原圖像和目標圖像的尺寸或 ROI的尺寸必須(根據不同的作操,例如<A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_cvPyrDown">cvPyrDown</A>
目標圖像的寬(高)必須等于原圖像的寬(高)除2 ±1)精確匹配,而IPL處理交叉區域,如圖像的大小或ROI大小可能是完全獨立的。
<HR>
<H3><A name=decl_CvArr>CvArr</A></H3>
<P class=Blurb>不確定數組</P><PRE> typedef void CvArr;
</PRE>
<P><A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_CvArr*">CvArr*</A>
僅僅是被用于作函數的參數,用于指示函數接收的數組類型可以不止一個,如 IplImage*, CvMat* 甚至 CvSeq*.
最終的數組類型是在運行時通過分析數組頭的前4 個字節判斷。 </P><!-- *****************************************************************************************
*****************************************************************************************
***************************************************************************************** -->
<HR>
<H1><A name=cxcore_arrays>數組操作</A></H1>
<HR>
<H2><A name=cxcore_arrays_alloc_free>初始化</A></H2>
<HR>
<H3><A name=decl_cvCreateImage>CreateImage</A></H3>
<P class=Blurb>創建頭并分配數據</P><PRE>IplImage* cvCreateImage( CvSize size, int depth, int channels );
</PRE>
<P>
<DL>
<DT>size
<DD>圖像寬、高.
<DT>depth
<DD>圖像元素的位深度,可以是下面的其中之一:<BR>IPL_DEPTH_8U - 無符號8位整型<BR>IPL_DEPTH_8S -
有符號8位整型<BR>IPL_DEPTH_16U - 無符號16位整型<BR>IPL_DEPTH_16S -
有符號16位整型<BR>IPL_DEPTH_32S - 有符號32位整型<BR>IPL_DEPTH_32F -
單精度浮點數<BR>IPL_DEPTH_64F - 雙精度浮點數<BR>
<DT>channels
<DD>每個元素(像素)通道號.可以是 1, 2, 3 或 4.通道是交叉存取的,例如通常的彩色圖像數據排列是:<BR>b0 g0 r0 b1 g1 r1
...<BR>雖然通常 IPL 圖象格式可以存貯非交叉存取的圖像,并且一些OpenCV 也能處理他, 但是這個函數只能創建交叉存取圖像. </DD></DL>
<P>函數 <A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_cvCreateImage">cvCreateImage</A>
創建頭并分配數據,這個函數是下列的縮寫型式 <PRE> header = cvCreateImageHeader(size,depth,channels);
cvCreateData(header);
</PRE>
<HR>
<H3><A name=decl_cvCreateImageHeader>CreateImageHeader</A></H3>
<P class=Blurb>分配,初始化,并且返回 IplImage結構</P><PRE>IplImage* cvCreateImageHeader( CvSize size, int depth, int channels );
</PRE>
<P>
<DL>
<DT>size
<DD>圖像寬、高.
<DT>depth
<DD>像深 (見 CreateImage).
<DT>channels
<DD>通道數 (見 CreateImage). </DD></DL>
<P>函數 <A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_cvCreateImageHeader">cvCreateImageHeader</A>
分配, 初始化, 并且返回 <CODE>IplImage結構</CODE>. 這個函數相似于: <PRE> iplCreateImageHeader( 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);
</PRE>然而IPL函數不是作為默認的 (見 <CODE>CV_TURN_ON_IPL_COMPATIBILITY</CODE> 宏)
<HR>
<H3><A name=decl_cvReleaseImageHeader>ReleaseImageHeader</A></H3>
<P class=Blurb>釋放頭</P><PRE>void cvReleaseImageHeader( IplImage** image );
</PRE>
<P>
<DL>
<DT>image
<DD>雙指針指向頭內存分配單元. </DD></DL>
<P>函數 <A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_cvReleaseImageHeader">cvReleaseImageHeader</A>
釋放頭. 相似于 <PRE> if( image )
{
iplDeallocate( *image, IPL_IMAGE_HEADER | IPL_IMAGE_ROI );
*image = 0;
}
</PRE>然而IPL函數不是作為默認的 (見 <CODE>CV_TURN_ON_IPL_COMPATIBILITY</CODE> 宏)
<HR>
<H3><A name=decl_cvReleaseImage>ReleaseImage</A></H3>
<P class=Blurb>釋放頭和圖像數據</P><PRE>void cvReleaseImage( IplImage** image );
</PRE>
<P>
<DL>
<DT>image
<DD>雙指針指向圖像內存分配單元。 </DD></DL>
<P>函數 <A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_cvReleaseImage">cvReleaseImage</A>
釋放頭和圖像數據,相似于: <PRE> if( *image )
{
cvReleaseData( *image );
cvReleaseImageHeader( image );
}
</PRE>
<HR>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -