📄 cxcore reference manual.htm
字号:
<P>
<DL>
<DT>arr
<DD>输入数组.
<DT>header
<DD>指向 <A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_CvMat">CvMat</A>结构的指针,作为临时缓存
.
<DT>coi
<DD>可选的输出参数,用于输出COI.
<DT>allowND
<DD>如果非0,函数就接收多维密集数组 (CvMatND*)并且返回 2D (如果 CvMatND 是二维的)或 1D 矩阵(当 CvMatND
是一维或多于二维). 数组必须是连续的. </DD></DL>
<P>函数 <A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_cvGetMat">cvGetMat</A>从输入的数组生成矩阵头,输入的数组可以是
- <A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_CvMat">CvMat</A>结构,
<CODE>IplImage结构</CODE> 或多维密集数组 <A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_CvMatND*">CvMatND*</A>
(后者只有当 <CODE>allowND != 0时才可以使用</CODE>) . 如果是矩阵函数只是返回指向矩阵的指针.如果是
<CODE>IplImage*</CODE> 或 <A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_CvMatND*">CvMatND*</A>
函数用当前图像的ROI初始化头结构并且返回指向这个临时结构的指针。因为<A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_CvMat">CvMat</A>不支持COI,所以他们的返回结果是不同的.
<P>这个函数提供了一个简单的方法,用同一代码处理 <CODE>IplImage</CODE> 和 <A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_CvMat">CvMat</A>二种数据类型。这个函数的反向转换可以用
<A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_cvGetImage">cvGetImage</A>将
<A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#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="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_cvGetImage">cvGetImage</A>
从输出数组获得图头,该数组可是以矩阵- <A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_CvMat*">CvMat*</A>,
或图像 - <CODE>IplImage*</CODE>. 如果是图像函数只是返回输入参数的指针,如是查 <A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_CvMat*">CvMat*</A>
函数用输入参数矩阵初始化图像头。因此如果我们把 <CODE>IplImage</CODE> 转换成 <A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#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="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_cvCreateSparseMat">cvCreateSparseMat</A>
分配多维稀疏数组. Initially the array contain no elements, that is <A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_cvGet*D">cvGet*D</A>
or <A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#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="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#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="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#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="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#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="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#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="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#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="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#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="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#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="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#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="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_cvGetNextSparseNode">cvGetNextSparseNode</A>
移动迭代器到下一个稀疏矩阵元素并返回指向他的指针。在当前的版本不存在任何元素的特殊顺序,因为元素是按HASH表存贮的下面的列子描述怎样在稀疏矩阵上迭代
:</P>
<P><FONT color=blue size=4>利</FONT><FONT color=blue size=4>用<A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#decl_cvInitSparseMatIterator">cvInitSparseMatIterator</A>
和<A
href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cxcore_chinese.htm#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 "
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -