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

📄 cv中文参考手册.htm

📁 Opencv的中文参考手册
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="Content-Language" content="zh-cn">
<link rel="STYLESHEET" href="opencvref.css" charset="gb2312" type="text/css">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>OpenCV: 图像处理和计算机视觉参考手册</title>
</head><body>

<h1>CV 参考手册</h1>

<hr>
<p><a href="http://blog.csdn.net/hunnish">HUNNISH</a> 注:</p>         
<p>本翻译是直接根据 OpenCV Beta 4.0           
版本的用户手册翻译的,原文件是:&lt;opencv_directory&gt;/doc/ref/opencvref_cv.htm,           
可以从 SOURCEFORG 上面的 OpenCV 项目下载,也可以直接从 <a href="http://www.assuredigit.com">阿须数码</a>           
中下载:<a href="http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cv.htm">http://www.assuredigit.com/incoming/sourcecode/opencv/chinese_docs/ref/opencvref_cv.htm</a>。</p>          
<p>翻译中肯定有不少错误,另外也有些术语和原文语义理解不透导致翻译不准确或者错误,也请有心人赐教。</p>

<p>图像处理、结构分析、运动分析和对象跟踪部分由R.Z.LIU翻译,模式识别、照相机定标与三维重建部分由H.M.ZHANG翻译,全文由Y.C.WEI统一修改校正。</p>

<hr><ul>
<li><a href="#cv_imgproc">图像处理</a>
<ul>
<li><a href="#cv_imgproc_features">梯度, 边缘和角点</a>                 
<li><a href="#cv_imgproc_resampling">采样                  
  差值和几何变换&nbsp;</a>
<li><a href="#cv_imgproc_morphology">形态学操作</a>
<li><a href="#cv_imgproc_filters">滤波和彩色变换</a>
<li><a href="#cv_imgproc_pyramids">金字塔及其应用</a>
<li><a href="#cv_imgproc_ccomp">连接组件</a>
<li><a href="#cv_imgproc_moments">图像和轮廓矩</a></span>
<li><a href="#cv_imgproc_special">特殊图像变换</a>
<li><a href="#cv_imgproc_histograms">直方图</a></span>
<li><a href="#cv_imgproc_matching">匹配</a></span>
</ul>
<li><a href="#cv_sa">结构分析</a>
<ul>
<li><a href="#cv_sa_contours">轮廓处理</a>
<li><a href="#cv_sa_compgeom">计算几何</a>
<li><a href="#cv_sa_subdiv">平面划分</a>
</ul>
<li><a href="#cv_motion">运动分析和对象跟踪</a>
<ul>
<li><a href="#cv_motion_acc">背景统计量的累积</a>
<li><span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; font-family: Times New Roman; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Times New Roman" lang="EN-US">&nbsp;                  
  </span><a href="#cv_motion_motempl">运动模板</a>
<li><a href="#cv_motion_tracking">对象跟踪</a>
<li><a href="#cv_motion_optflow">光流</a>
<li><a href="#cv_motion_estimators">预估器</a>
</ul>
<li><a href="#cv_pattern">模式识别</a>
<ul>
<li><a href="#cv_pattern_objdetection">目标检测</a>
</ul>
<li><a href="#cv_3d">照相机定标和三维重建</a>
<ul>
<li><a href="#cv_3d_calibration">照相机定标</a>
<li><a href="#cv_3d_pose">姿态估计</a></span>
<li><a href="#cv_3d_epipolar">极线几何</a></span>
</ul>
<li><a href="#cv_func_index">函数列表</a>
<li><a href="#cv_bib">参考</a></span>
</ul>

<hr><h1><a name="cv_imgproc">图像处理</a></h1>

<p>
注意:<br>
本章描述图像处理和分析的一些函数。其中大多数函数都是针对两维象素数组的,这里,我们称这些数组为“图像”,但是它们不一定非得是IplImage 结构,也可以是CvMat或者CvMatND结构。             
</p>

<hr><h2><a name="cv_imgproc_features">梯度、边缘和角点</a></h2>

<hr><h3><a name="decl_cvSobel">Sobel</a></h3>
<p class="Blurb"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">使用扩展</span> 
Sobel <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">算子计算一阶、二阶、三阶或混合图像差分</span></p>               
<pre>
void cvSobel( const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size=3 );
</pre><p><dl>
<dt>src<dd>输入图像.
<dt>dst<dd>输出图像.
<dt>xorder
<dd>x&nbsp; 方向上的差分阶数</dd>                
<dt>yorder<dd>y&nbsp; 方向上的差分阶数                
<dt>aperture_size<dd>扩展 Sobel 核的大小,必须是 1,                 
  3, 5 或 7。 除了尺寸为 1, 其它情况下, aperture_size ×aperture_size                 
  可分离内核将用来计算差分。对 aperture_size=1的情况, 使用                 
  3x1 或 1x3 内核   
  (不进行高斯平滑操作)。这里有一个特殊变量&nbsp;                 
  CV_SCHARR (=-1),对应 3x3 Scharr 滤波器,可以给出比 3x3 Sobel                 
  滤波更精确的结果。Scharr 滤波器系数是:                   
<pre>
| -3 0  3|
|-10 0 10|
| -3 0  3|
</pre>
  对 x-方向 以及转置矩阵对 y-方向。                   
</dl><p>
函数 <a href="#decl_cvSobel">cvSobel</a>                 
通过对图像用相应的内核进行卷积操作来计算图像差分:</p>                
<pre>
dst(x,y) = d<sup>xorder+yoder</sup>src/dx<sup>xorder</sup>&#8226;dy<sup>yorder</sup> |<sub>(x,y)</sub>
</pre>
由于Sobel 算子结合了 Gaussian   
平滑和微分,所以,其结果或多或少对噪声有一定的鲁棒性。通常情况,函数调用采用如下参数                 
(xorder=1, yorder=0, aperture_size=3) 或 (xorder=0, yorder=1, aperture_size=3)                 
来计算一阶 x- 或 y- 方向的图像差分。第一种情况对应:                   
<pre>
  |-1  0  1|
  |-2  0  2|
  |-1  0  1|
</pre>
<p>核。第二种对应</p>
<pre>
  |-1 -2 -1|
  | 0  0  0|
  | 1  2  1|
or
  | 1  2  1|
  | 0  0  0|
  |-1 -2 -1|
</pre>
核的选则依赖于图像原点的定义 (<code>origin</span></code>                 
来自 <code>IplImage</span></code>                
结构的定义)。由于该函数不进行图像尺度变换,所以和输入图像(数组)相比,输出图像(数组)的元素通常具有更大的绝对数值(译者注:即象素的深度)。为防止溢出,当输入图像是                 
8 位的,要求输出图像是 16 位的。当然可以用函数函数 <a href="#decl_cvConvertScale">cvConvertScale</a>                 
或 <a href="../../../../绋嬪簭/OpenCV/docs/ref/opencvref_cxcore.htm#decl_cvConvertScaleAbs">cvConvertScaleAbs</a>                 
转换为 8 位的。除了 8-比特 图像,函数也接受 32-位   
浮点数图像。所有输入和输出图像都必须是单通道的,并且具有相同的图像尺寸或者ROI尺寸。   


<hr><h3><a name="decl_cvLaplace">Laplace</a></h3>
<p class="Blurb"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">计算图像的</span> 
Laplacian&nbsp;变换</p>               
<pre>
void cvLaplace( const CvArr* src, CvArr* dst, int aperture_size=3 );
</pre><p><dl>
<dt>src<dd>输入图像.
<dt>dst<dd>输出图像.
<dt>aperture_size<dd>核大小 (与 <a href="#decl_cvSobel">cvSobel</a>                 
  中定义一样).                
</dl><p>
函数 <a href="#decl_cvLaplace">cvLaplace</a>                 
计算输入图像的 Laplacian变换,方法是先用 sobel 算子计算二阶 x-                 
和 y- 差分,再求和:</p>               
<pre>
dst(x,y) = d<sup>2</sup>src/dx<sup>2</sup> + d<sup>2</sup>src/dy<sup>2</sup>
</pre>
<p>
对 <code>aperture_size</span></code>=1                 
则给出最快计算结果,相当于对图像采用如下内核做卷积:</p>
<pre>
|0  1  0|
|1 -4  1|
|0  1  0|
</pre><p>
类似于 <a href="#decl_cvSobel">cvSobel</a>                 
 函数,该函数也不作图像的尺度变换,所支持的输入、输出图像类型的组合和<a href="#decl_cvSobel">cvSobel</a>一致。               
</p>


<hr><h3><a name="decl_cvCanny">Canny</a></h3>
<p class="Blurb"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">采用</span> 
Canny <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">算法做边缘检测</span></p>               
<pre>
void cvCanny( const CvArr* image, CvArr* edges, double threshold1,
              double threshold2, int aperture_size=3 );
</pre><p><dl>
<dt>image<dd>输入图像.
<dt>edges<dd>输出的边缘图像
<dt>threshold1
<dd>第一个阈值</dd>
<dt>threshold2<dd>第二个阈值
<dt>aperture_size<dd>Sobel 算子内核大小 (见 <a href="#decl_cvSobel">cvSobel</a>).                
</dl><p>
函数 <a href="#decl_cvCanny">cvCanny</a> 采用 CANNY   
算法发现输入图像的边缘而且在输出图像中标识这些边缘。<code>threshold1</code>和<code>threshold2</code> 当中的小
阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。</p>               


<hr><h3><a name="decl_cvPreCornerDetect">PreCornerDetect</a></h3>
<p class="Blurb"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">计算用于角点检测的特征图,</span></p>
<pre>
void cvPreCornerDetect( const CvArr* image, CvArr* corners, int aperture_size=3 );
</pre><p><dl>
<dt>image<dd>输入图像.
<dt>corners<dd>保存候选角点的特征图
<dt>aperture_size<dd>Sobel 算子的核大小(见<a href="#decl_cvSobel">cvSobel</a>).                
</dl><p>
函数 <a href="#decl_cvPreCornerDetect">cvPreCornerDetect</a>                 
计算函数 D<sub>x</sub><sup>2</sup>D<sub>yy</sub>+D<sub>y</sub><sup>2</sup>D<sub>xx</sub>                 
- 2D<sub>x</sub>D<sub>y</sub>D<sub>xy</sub> 其中 D<sub>?</sub>                 
表示一阶图像差分,D<sub>??</sub> 表示二阶图像差分。                 
角点被认为是函数的局部最大值:</p>
<pre>
// 假设图像格式为浮点数
IplImage* corners = cvCloneImage(image);
IplImage* dilated_corners = cvCloneImage(image);
IplImage* corner_mask = cvCreateImage( cvGetSize(image), 8, 1 );
cvPreCornerDetect( image, corners, 3 );
cvDilate( corners, dilated_corners, 0, 1 );
cvSubS( corners, dilated_corners, corners );
cvCmpS( corners, 0, corner_mask, CV_CMP_GE );
cvReleaseImage( &amp;corners );
cvReleaseImage( &amp;dilated_corners );
</pre>

<hr><h3><a name="decl_cvCornerEigenValsAndVecs">CornerEigenValsAndVecs</a></h3>
<p class="Blurb"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">计算图像块的特征值和特征向量,用于角点检测</span></p>
<pre>
void cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv,
                               int block_size, int aperture_size=3 );
</pre><p><dl>
<dt>image<dd>输入图像.
<dt>eigenvv<dd>保存结果的数组。必须比输入图像宽            
  6 倍。                
<dt>block_size<dd>邻域大小 (见讨论).                
<dt>aperture_size<dd>Sobel 算子的核尺寸(见 <a href="#decl_cvSobel">cvSobel</a>).                
</dl><p>
对每个象素,函数 <a href="#decl_cvCornerEigenValsAndVecs">cvCornerEigenValsAndVecs</a>                 
考虑 <code>block_size</span></code>                
× <code>block_size</span></code>                
大小的邻域 S(p),然后在邻域上计算图像差分的相关矩阵:</p>                  
<pre>
    | sum<sub>S(p)</sub>(dI/dx)<sup>2</sup>   sum<sub>S(p)</sub>(dI/dx&#8226;dI/dy)|
M = |                                 |
    | sum<sub>S(p)</sub>(dI/dx&#8226;dI/dy)  sum<sub>S(p)</sub>(dI/dy)<sup>2</sup> |
</pre><p>
然后它计算矩阵的特征值和特征向量,并且按如下方式(λ<sub>1</sub>,            
λ<sub>2</sub>, x<sub>1</sub>, y<sub>1</sub>, x<sub>2</sub>, y<sub>2</sub>)存储这些值到输出图像中,其中<br>           
<br>
&lambda;<sub>1</sub>, &lambda;<sub>2</sub> - <code>M 的</span></code>特征值,没有排序<br>                   
(x<sub>1</sub>, y<sub>1</sub>) - 特征向量,对 λ<sub>1</sub><br>                   
(x<sub>2</sub>, y<sub>2</sub>) - 特征向量,对 λ<sub>2</sub><br>                   
</p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -