⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cxcore中文 参考手册.htm

📁 Opencv的中文参考手册
💻 HTM
📖 第 1 页 / 共 5 页
字号:
  <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**)&amp;data, &amp;step, &amp;size );
    step /= sizeof(data[0]);

    for( y = 0; y &lt; size.height; y++, data += step )
        for( x = 0; x &lt; 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>结构,&nbsp; <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>     
函数用输入参数矩阵初始化图像头。因此如果我们把&nbsp; <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> 是&nbsp; <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, &amp;mat_iterator );

    for( ; node != 0; node = cvGetNextSparseNode( &amp;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( &quot;(&quot; );
        for( i = 0; i &lt; dims; i++ )
            printf( &quot;%4d%s&quot;, idx[i], i &lt; dims - 1 &quot;,&quot; : &quot;): &quot; );
        printf( &quot;%g\n&quot;, val );

        sum += val;
    }

    printf( &quot;\nTotal sum = %g\n&quot;, 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 + -