📄 cxcore中文 参考手册.htm
字号:
<DT>data
<DD>输出指针,指针指向整个图像的结构或ROI
<DT>step
<DD>输出行字节长
<DT>roi_size
<DD>输出ROI尺寸 </DD></DL>
<P>函数 <A href="#decl_cvGetRawData">cvGetRawData</A> 添充给输出变量数组的底层信息。所有的输出参数是可选的 ,
因此这些指针可设为NULL. 如果数组是设置了ROI的 <CODE>IplImage</CODE> 结构, ROI参数被返回。 </P>
<P>接下来的例子展示怎样去接近数组元素。</P>
<P><FONT color=blue size=4>使用 GetRawData 计算单通道浮点数组的元素绝对值.</FONT> <PRE> float* data;
int step;
CvSize size;
int x, 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]);
</PRE>
<HR>
<H3><A name=decl_cvGetMat>GetMat</A></H3>
<P class=Blurb>从不确定数组返回矩阵头</P><PRE>CvMat* cvGetMat( const CvArr* arr, CvMat* header, int* coi=NULL, int allowND=0 );
</PRE>
<P>
<DL>
<DT>arr
<DD>输入数组.
<DT>header
<DD>指向 <A href="#decl_CvMat">CvMat</A>结构的指针,作为临时缓存 .
<DT>coi
<DD>可选的输出参数,用于输出COI.
<DT>allowND
<DD>如果非0,函数就接收多维密集数组 (CvMatND*)并且返回 2D (如果 CvMatND 是二维的)或 1D 矩阵(当 CvMatND
是一维或多于二维). 数组必须是连续的. </DD></DL>
<P>函数 <A href="#decl_cvGetMat">cvGetMat</A>从输入的数组生成矩阵头,输入的数组可以是 - <A
href="#decl_CvMat">CvMat</A>结构, <CODE>IplImage结构</CODE> 或多维密集数组 <A
href="#decl_CvMatND*">CvMatND*</A> (后者只有当 <CODE>allowND != 0时才可以使用</CODE>) .
如果是矩阵函数只是返回指向矩阵的指针.如果是 <CODE>IplImage*</CODE> 或 <A
href="#decl_CvMatND*">CvMatND*</A> 函数用当前图像的ROI初始化头结构并且返回指向这个临时结构的指针。因为<A
href="#decl_CvMat">CvMat</A>不支持COI,所以他们的返回结果是不同的.
<P>这个函数提供了一个简单的方法,用同一代码处理 <CODE>IplImage</CODE> 和 <A
href="#decl_CvMat">CvMat</A>二种数据类型。这个函数的反向转换可以用 <A
href="#decl_cvGetImage">cvGetImage</A>将 <A href="#decl_CvMat">CvMat</A> 转换成
<CODE>IplImage</CODE> . </P>
<P>输入的数组必须有已分配好的底层数据或附加的数据,否则该函数将调用失败 </P>如果输入的数组是<CODE>IplImage</CODE>
格式,使用平面式数据编排并设置了COI,函数返回的指针指向被选定的平面并设置COI=0.利用OPENCV函数对于多通道平面编排图像可以处理每个平面。
<HR>
<H3><A name=decl_cvGetImage>GetImage</A></H3>
<P class=Blurb>从不确定数组返回图像头</P><PRE>IplImage* cvGetImage( const CvArr* arr, IplImage* image_header );
</PRE>
<P>
<DL>
<DT>arr
<DD>输入数组.
<DT>image_header
<DD>指向<CODE>IplImage结构的指针,该结构存贮在一个临时缓存</CODE> . </DD></DL>
<P>函数 <A href="#decl_cvGetImage">cvGetImage</A> 从输出数组获得图头,该数组可是以矩阵- <A
href="#decl_CvMat*">CvMat*</A>, 或图像 - <CODE>IplImage*</CODE>.
如果是图像函数只是返回输入参数的指针,如是查 <A href="#decl_CvMat*">CvMat*</A>
函数用输入参数矩阵初始化图像头。因此如果我们把 <CODE>IplImage</CODE> 转换成 <A
href="#decl_CvMat">CvMat</A> 然后再转换 CvMat 回
IplImage,如果ROI被设置过了我们可能会获得不同的头,这样一些计算图像跨度的IPL函数就会失败。</P>
<HR>
<H3><A name=decl_cvCreateSparseMat>CreateSparseMat</A></H3>
<P class=Blurb>创建稀疏数组</P><PRE>CvSparseMat* cvCreateSparseMat( int dims, const int* sizes, int type );
</PRE>
<P>
<DL>
<DT>dims
<DD>数组维数。相对于密集型矩阵,稀疏数组的维数是不受限制的(最多可达 2<SUP>16</SUP>).
<DT>sizes
<DD>数组的维大小.
<DT>type
<DD>数组元素类型,见 CvMat </DD></DL>
<P>函数 <A href="#decl_cvCreateSparseMat">cvCreateSparseMat</A> 分配多维稀疏数组.
Initially the array contain no elements, that is <A
href="#decl_cvGet*D">cvGet*D</A> or <A href="#decl_cvGetReal*D">cvGetReal*D</A>
return zero for every index</P>
<HR>
<H3><A name=decl_cvReleaseSparseMat>ReleaseSparseMat</A></H3>
<P class=Blurb>删除稀疏数组</P>
<P class=Blurb><BR>void cvReleaseSparseMat( CvSparseMat** mat );<BR></P>
<DL>
<DT>mat
<DD>双指针指向数组。 </DD></DL>
<P>函数 <A href="#decl_cvReleaseSparseMat">cvReleaseSparseMat</A>释放稀疏数组并清空数组指针</P>
<HR>
<H3><A name=decl_cvCloneSparseMat>CloneSparseMat</A></H3>
<P class=Blurb>创建稀疏数组的拷贝</P><PRE>CvSparseMat* cvCloneSparseMat( const CvSparseMat* mat );
</PRE>
<P>
<DL>
<DT>mat
<DD>输放的数组。 </DD></DL>
<P>函数 <A href="#decl_cvCloneSparseMat">cvCloneSparseMat</A>
创建输入数组的拷贝并返回指向这个拷贝的指针.</P>
<HR>
<H2><A name=cxcore_arrays_get_set>获取元素和数组子集</A></H2>
<HR>
<H3><A name=decl_cvGetSubRect>GetSubRect</A></H3>
<P class=Blurb>根据输入的图像或矩阵的矩形数组子集返回矩阵头</P><PRE>CvMat* cvGetSubRect( const CvArr* arr, CvMat* submat, CvRect rect );
</PRE>
<P>
<DL>
<DT>arr
<DD>输入数组
<DT>submat
<DD>指针指向结果数组头Pointer to the resultant sub-array header.
<DT>rect
<DD>以0坐标为基准的ROI. </DD></DL>
<P>函数 <A href="#decl_cvGetSubRect">cvGetSubRect</A>
根据指定的数组矩形返回矩阵头,换句话说,函数允许处理输入数组的指定的一个子矩形,就像一个独立的数组一样进行处理。函数在处理时要考虑进输入数组的ROI,因此数组的ROI是实际上被提取的。</P>
<HR>
<H3><A name=decl_cvGetRow>GetRow, GetRows</A></H3>
<P class=Blurb>返回数组的行或在一定跨度内的行</P><PRE>CvMat* cvGetRow( const CvArr* arr, CvMat* submat, int row );
CvMat* cvGetRows( const CvArr* arr, CvMat* submat, int start_row, int end_row, int delta_row=1 );
</PRE>
<DL>
<DT>arr
<DD>输入数组.
<DT>submat
<DD>指向返回的子数组头的指针.
<DT>row
<DD>被选定的行号下标,以0为基准.
<DT>start_row
<DD>跨度的开始行(包括此行)索引下标,以0为下标基准
<DT>end_row
<DD>跨度的结束行(不包括此行)索引下标,以0为下标基准.
<DT>delta_row
<DD>在跨度内的索引下标跨步,从开始行到结束行每隔<CODE>delta_row行提取一行。</CODE> </DD></DL>
<P>函数<CODE>GetRow</CODE> 和 <CODE>GetRows</CODE> 根据指定的行或跨度从输入数组中返回对应的头。
<CODE>GetRow</CODE> 是 <A href="#decl_cvGetRows">cvGetRows</A>的缩写: <PRE>cvGetRow( arr, submat, row ) ~ cvGetRows( arr, submat, row, row + 1, 1 );
</PRE>
<HR>
<H3><A name=decl_cvGetCol>GetCol, GetCols</A></H3>
<P class=Blurb>返回数组的列或一定跨度内的列</P><PRE>CvMat* cvGetCol( const CvArr* arr, CvMat* submat, int col );
CvMat* cvGetCols( const CvArr* arr, CvMat* submat, int start_col, int end_col );
</PRE>
<P>
<DL>
<DT>arr
<DD>输入数组
<DT>submat
<DD>指向结果子数组头指针.
<DT>col
<DD>选定的列索引下标,该下标以0为基准。
<DT>start_col
<DD>跨度的开始列(包括该列)索引下标,该下标以0为基准。
<DT>end_col
<DD>跨度的结束列(不包括该列)索引下标,该下标以0为基准。 </DD></DL>
<P>函数 <CODE>GetCol</CODE> 和 <CODE>GetCols</CODE>
根据指定的列/列跨度返回头。<CODE>GetCol</CODE> 是 <A
href="#decl_cvGetCols">cvGetCols</A>的缩写形式:<PRE>cvGetCol( arr, submat, col ); // ~ cvGetCols( arr, submat, col, col + 1 );
</PRE>
<HR>
<H3><A name=decl_cvGetDiag>GetDiag</A></H3>
<P class=Blurb>返回一个数组对角线</P><PRE>CvMat* cvGetDiag( const CvArr* arr, CvMat* submat, int diag=0 );
</PRE>
<P>
<DL>
<DT>arr
<DD>输入数组.
<DT>submat
<DD>指向结果子集的头指针.
<DT>diag
<DD>数组对角线。0是主对角线,-1是主对角线上面对角线,1是主对角线下对角线,以此类推。 </DD></DL>
<P>函数 <A href="#decl_cvGetDiag">cvGetDiag</A> 根据指定的diag参数返回数组的对角线头。</P>
<HR>
<H3><A name=decl_cvGetSize>GetSize</A></H3>
<P class=Blurb>返回图像或矩阵ROI大小</P><PRE>CvSize cvGetSize( const CvArr* arr );
</PRE>
<P>
<DL>
<DT>arr
<DD>数组头. </DD></DL>
<P>函数 <A href="#decl_cvGetSize">cvGetSize</A> 返回矩阵或图像的行数和列数,如果是图像就返回ROI的大小</P>
<HR>
<H3><A name=decl_cvInitSparseMatIterator>InitSparseMatIterator</A></H3>
<P class=Blurb>初始化稀疏数线元素迭代器</P><PRE>CvSparseNode* cvInitSparseMatIterator( const CvSparseMat* mat,
CvSparseMatIterator* mat_iterator );
</PRE>
<P>
<DL>
<DT>mat
<DD>输入的数组.
<DT>mat_iterator
<DD>被初始化迭代器. </DD></DL>
<P>函数 <A href="#decl_cvInitSparseMatIterator">cvInitSparseMatIterator</A>
初始化稀疏数组元素的迭代器并且返回指向第一个元素的指针,如果数组为空则返回NULL。</P>
<HR>
<H3><A name=decl_cvGetNextSparseNode>GetNextSparseNode</A></H3>
<P class=Blurb>初始化稀疏数线元素迭代器</P><PRE>CvSparseNode* cvGetNextSparseNode( CvSparseMatIterator* mat_iterator );
</PRE>
<P>
<DL>
<DT>mat_iterator
<DD>稀疏数组的迭代器 </DD></DL>
<P>函数<A href="#decl_cvGetNextSparseNode">cvGetNextSparseNode</A>
移动迭代器到下一个稀疏矩阵元素并返回指向他的指针。在当前的版本不存在任何元素的特殊顺序,因为元素是按HASH表存贮的下面的列子描述怎样在稀疏矩阵上迭代
:</P>
<P><FONT color=blue size=4>利</FONT><FONT color=blue size=4>用<A
href="#decl_cvInitSparseMatIterator">cvInitSparseMatIterator</A> 和<A
href="#decl_cvGetNextSparseNode">cvGetNextSparseNode</A> 计算浮点稀疏数组的和。</FONT> <PRE> double sum;
int i, dims = cvGetDims( array );
CvSparseMatIterator mat_iterator;
CvSparseNode* node = cvInitSparseMatIterator( array, &mat_iterator );
for( ; node != 0; node = cvGetNextSparseNode( &mat_iterator ))
{
int* idx = CV_NODE_IDX( array, node ); /* get pointer to the element indices */
float val = *(float*)CV_NODE_VAL( array, node ); /* get value of the element
(assume that the type is CV_32FC1) */
printf( "(" );
for( i = 0; i < dims; i++ )
printf( "%4d%s", idx[i], i < dims - 1 "," : "): " );
printf( "%g\n", val );
sum += val;
}
printf( "\nTotal sum = %g\n", sum );
</PRE>
<HR>
<H3><A name=decl_cvGetElemType>GetElemType</A></H3>
<P class=Blurb>返回数组元素类型</P><PRE>int cvGetElemType( const CvArr* arr );
</PRE>
<P>
<DL>
<DT>arr
<DD>输入数组. </DD></DL>
<P>函数 <CODE>GetElemType</CODE> 返回数组元素类型就像在cvCreateMat 中讨论的一样: <PRE>CV_8UC1 ... CV_64FC4</PRE>
<HR>
<H3><A name=decl_cvGetDims>GetDims, GetDimSize</A></H3>
<P class=Blurb>返回数组维数和他们的大小或者殊维的大小</P><PRE>int cvGetDims( const CvArr* arr, int* sizes=NULL );
int cvGetDimSize( const CvArr* arr, int index );
</PRE>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -