📄 cxcore中文 参考手册.htm
字号:
<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="#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="#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="#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="#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="#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="#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="#decl_cvReleaseImage">cvReleaseImage</A> 释放头和图像数据,相似于: <PRE> if( *image )
{
cvReleaseData( *image );
cvReleaseImageHeader( image );
}
</PRE>
<HR>
<H3><A name=decl_cvInitImageHeader>InitImageHeader</A></H3>
<P class=Blurb>初始他被用图分配的图像头</P><PRE>IplImage* cvInitImageHeader( IplImage* image, CvSize size, int depth,
int channels, int origin=0, int align=4 );
</PRE>
<P>
<DL>
<DT>image
<DD>被初始化的图像头.
<DT>size
<DD>图像的宽高.
<DT>depth
<DD>像深(见 CreateImage).
<DT>channels
<DD>通道数(见 CreateImage).
<DT>origin
<DD><CODE>IPL_ORIGIN_TL</CODE> 或 <CODE>IPL_ORIGIN_BL</CODE>.
<DT>align
<DD>图像行排列, 典型的 4 或 8 字节. </DD></DL>
<P>函数 <A href="#decl_cvInitImageHeader">cvInitImageHeader</A> 初始他图像头结构,
指向用户指定的图像并且返回这个指针。 </P>
<HR>
<H3><A name=decl_cvCloneImage>CloneImage</A></H3>
<P class=Blurb>制作图像的完整拷贝</P><PRE>IplImage* cvCloneImage( const IplImage* image );
</PRE>
<P>
<DL>
<DT>image
<DD>原图像. </DD></DL>
<P>函数 <A href="#decl_cvCloneImage">cvCloneImage</A> 制作图像的完整拷贝包括头、ROI和数据 </P>
<HR>
<H3><A name=decl_cvSetImageCOI>SetImageCOI</A></H3>
<P class=Blurb>基于给定的值设置感兴趣通道</P><PRE>void cvSetImageCOI( IplImage* image, int coi );
</PRE>
<P>
<DL>
<DT>image
<DD>图像头.
<DT>coi
<DD>感兴趣通道. </DD></DL>
<P>函数 <A href="#decl_cvSetImageCOI">cvSetImageCOI</A> 基于给定的值设置感兴趣的通道。值 0
意味着所有的通道都被选定, 1 意味着第一个通道被选定等等。如果 ROI 是 <CODE>NULL</CODE> 并且<CODE>COI!= 0</CODE>,
ROI 被分配. 然而大多数的 OpenCV 函数不支持 COI, 对于这种状况当处理分离图像/矩阵通道时,可以拷贝(通过 <A
href="#decl_cvCopy">cvCopy</A> 号 <A href="#decl_cvSplit">cvSplit</A>)
通道来分离图像/矩阵,处理后如果需要可再拷贝(通过<A href="#decl_cvCopy">cvCopy</A> 或 <A
href="#decl_cvCvtPlaneToPix">cvCvtPlaneToPix</A>)回来.</P>
<HR>
<H3><A name=decl_cvGetImageCOI>GetImageCOI</A></H3>
<P class=Blurb>返回感兴趣通道号</P><PRE>int cvGetImageCOI( const IplImage* image );
</PRE>
<P>
<DL>
<DT>image
<DD>图像头. </DD></DL>
<P>函数<A href="#decl_cvGetImageCOI">cvGetImageCOI</A>
返回图像的感兴趣通道(当所有的通道都被选中返回值是0).</P>
<HR>
<H3><A name=decl_cvSetImageROI>SetImageROI</A></H3>
<P class=Blurb>基于给定的矩形设置感兴趣区域</P><PRE>void cvSetImageROI( IplImage* image, CvRect rect );
</PRE>
<P>
<DL>
<DT>image
<DD>图像头.
<DT>rect
<DD>ROI 矩形. </DD></DL>
<P>函数 <A href="#decl_cvSetImageROI">cvSetImageROI</A> 基于给定的矩形设置图像的 ROI(感兴趣区域) .
如果ROI是<CODE>NULL</CODE> 并且参数RECT的值不等于整个图像, ROI被分配. 不像 COI, 大多数的 OpenCV 函数支持 ROI
并且处理它就行它是一个分离的图像 (例如, 所有的像素坐标从ROI的顶-左或底-左角(基于图像的结构)计算。</P>
<HR>
<H3><A name=decl_cvResetImageROI>ResetImageROI</A></H3>
<P class=Blurb>释放图偈的ROI</P><PRE>void cvResetImageROI( IplImage* image );
</PRE>
<P>
<DL>
<DT>image
<DD>图像头. </DD></DL>
<P>函数 <A href="#decl_cvResetImageROI">cvResetImageROI</A> 释放图像 ROI.
释放之后整个图像被认为是全部被选中的。相似的结果可以通过下述办法</P><PRE>cvSetImageROI( image, cvRect( 0, 0, image->width, image->height ));
cvSetImageCOI( image, 0 );
</PRE>
<P>但是后者的变量不分配 <CODE>image->roi</CODE>. </P>
<HR>
<H3><A name=decl_cvGetImageROI>GetImageROI</A></H3>
<P class=Blurb>返回图像的 ROI 坐标</P><PRE>CvRect cvGetImageROI( const IplImage* image );</PRE>
<P>
<DL>
<DT>image
<DD>图像头. </DD></DL>
<P>函数 <A href="#decl_cvGetImageROI">cvGetImageROI</A> 返回图像ROI 坐标. 如果没有ROI则返回矩形值为
<A
href="#decl_cvRect">cvRect</A>(0,0,image->width,image->height) </P>
<HR>
<H3><A name=decl_cvCreateMat>CreateMat</A></H3>
<P class=Blurb>创建矩阵</P><PRE>CvMat* cvCreateMat( int rows, int cols, int type );
</PRE>
<P>
<DL>
<DT>rows
<DD>矩阵行数.
<DT>cols
<DD>矩阵列数.
<DT>type
<DD>矩阵元素类型. 通常以
<CODE>CV_<bit_depth>(S|U|F)C<number_of_channels>型式描述</CODE>,
例如:<BR><CODE>CV_8UC1</CODE> 意思是一个8-bit 无符号单通道矩阵, <CODE>CV_32SC2</CODE>
意思是一个32-bit 有符号二个通道的矩阵. </DD></DL>
<P>函数 <A href="#decl_cvCreateMat">cvCreateMat</A> 为新的矩阵分配头和下面的数据,
并且返回一个指向新创建的矩阵的指针. 是下列操作的缩写型式:</P><PRE> CvMat* mat = cvCreateMatHeader( rows, cols, type );
cvCreateData( mat );
</PRE>
<P>矩阵按行存贮. 所有的行以4个字节排列。 </P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -