📄 opencv 图像处理和计算机视觉参考手册.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0077)http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm -->
<HTML><HEAD><TITLE>OpenCV: 图像处理和计算机视觉参考手册</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META http-equiv=Content-Language content=zh-cn><LINK
href="OpenCV 图像处理和计算机视觉参考手册.files/opencvref.css" type=text/css charset=gb2312
rel=STYLESHEET>
<META content="MSHTML 6.00.2900.2180" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId></HEAD>
<BODY>
<H1>CV 参考手册</H1>
<HR>
<P><A href="http://blog.csdn.net/hunnish">HUNNISH</A> 注:</P>
<P>本翻译是直接根据 OpenCV Beta 4.0
版本的用户手册翻译的,原文件是:<opencv_directory>/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="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_imgproc">图像处理</A>
<UL>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_imgproc_features">梯度,
边缘和角点</A>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_imgproc_resampling">采样
差值和几何变换 </A>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_imgproc_morphology">形态学操作</A>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_imgproc_filters">滤波和彩色变换</A>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_imgproc_pyramids">金字塔及其应用</A>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_imgproc_ccomp">连接组件</A>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_imgproc_moments">图像和轮廓矩</A></SPAN>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_imgproc_special">特殊图像变换</A>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_imgproc_histograms">直方图</A></SPAN>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_imgproc_matching">匹配</A></SPAN>
</LI></UL>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_sa">结构分析</A>
<UL>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_sa_contours">轮廓处理</A>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_sa_compgeom">计算几何</A>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_sa_subdiv">平面划分</A>
</LI></UL>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_motion">运动分析和对象跟踪</A>
<UL>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_motion_acc">背景统计量的累积</A>
<LI><SPAN lang=EN-US
style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; FONT-STYLE: normal; FONT-FAMILY: Times New Roman; FONT-VARIANT: normal; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: Times New Roman">
</SPAN><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_motion_motempl">运动模板</A>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_motion_tracking">对象跟踪</A>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_motion_optflow">光流</A>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_motion_estimators">预估器</A>
</LI></UL>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_pattern">模式识别</A>
<UL>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_pattern_objdetection">目标检测</A>
</LI></UL>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_3d">照相机定标和三维重建</A>
<UL>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_3d_calibration">照相机定标</A>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_3d_pose">姿态估计</A></SPAN>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_3d_epipolar">极线几何</A></SPAN>
</LI></UL>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_func_index">函数列表</A>
<LI><A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#cv_bib">参考</A></SPAN>
</LI></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 方向上的差分阶数
<DT>yorder
<DD>y 方向上的差分阶数
<DT>aperture_size
<DD>扩展 Sobel 核的大小,必须是 1, 3, 5 或 7。 除了尺寸为 1, 其它情况下, aperture_size
×aperture_size 可分离内核将用来计算差分。对 aperture_size=1的情况, 使用 3x1 或 1x3 内核
(不进行高斯平滑操作)。这里有一个特殊变量 CV_SCHARR (=-1),对应 3x3 Scharr 滤波器,可以给出比 3x3 Sobel
滤波更精确的结果。Scharr 滤波器系数是: <PRE>| -3 0 3|
|-10 0 10|
| -3 0 3|
</PRE>对 x-方向 以及转置矩阵对 y-方向。 </DD></DL>
<P>函数 <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvSobel">cvSobel</A>
通过对图像用相应的内核进行卷积操作来计算图像差分:</P><PRE>dst(x,y) = d<SUP>xorder+yoder</SUP>src/dx<SUP>xorder</SUP>•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="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvConvertScale">cvConvertScale</A>
或 <A
href="http://fsa.ia.ac.cn/绋嬪簭/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 变换</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="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvSobel">cvSobel</A>
中定义一样). </DD></DL>
<P>函数 <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#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="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvSobel">cvSobel</A>
函数,该函数也不作图像的尺度变换,所支持的输入、输出图像类型的组合和<A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#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>第一个阈值
<DT>threshold2
<DD>第二个阈值
<DT>aperture_size
<DD>Sobel 算子内核大小 (见 <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvSobel">cvSobel</A>).
</DD></DL>
<P>函数 <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#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="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvSobel">cvSobel</A>).
</DD></DL>
<P>函数 <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#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 );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -