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

📄 opencv 图像处理和计算机视觉参考手册.htm

📁 Opencv的中文参考指南
💻 HTM
📖 第 1 页 / 共 5 页
字号:
  <DT>dst
  <DD>输出图像. 
  <DT>element
  <DD>用于腐蚀的结构元素。若为 <CODE>NULL</SPAN></CODE>, 则使用 3×3 长方形的结构元素 
  <DT>iterations
  <DD>腐蚀的次数 </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_cvErode">cvErode</A> 
对输入图像使用指定的结构元素进行腐蚀,该结构元素决定每个具有最小值象素点的邻域形状:</P><PRE>dst=erode(src,element):  dst(x,y)=min<SUB>((x',y') in element)</SUB>)src(x+x',y+y')
</PRE>
<P>函数可能是本地操作,不需另外开辟存储空间的意思。腐蚀可以重复进行 (<CODE>iterations</SPAN></CODE>) 次. 
对彩色图像,每个彩色通道单独处理。</P>
<HR>

<H3><A name=decl_cvDilate>Dilate</A></H3>
<P class=Blurb><SPAN 
style="FONT-FAMILY: 宋体; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">使用任意结构元素膨胀图像</SPAN></P><PRE>void cvDilate( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );
</PRE>
<P>
<DL>
  <DT>src
  <DD>输入图像. 
  <DT>dst
  <DD>输出图像. 
  <DT>element
  <DD>用于膨胀的结构元素。若为 <CODE>NULL</SPAN></CODE>, 则使用 3×3 长方形的结构元素 
  <DT>iterations
  <DD>膨胀的次数 </DD></DL>
<P></P>
<P>函数 <A 
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvDilate">cvDilate</A> 
对输入图像使用指定的结构元进行膨胀,该结构决定每个具有最小值象素点的邻域形状:</P><PRE>dst=dilate(src,element):  dst(x,y)=max<SUB>((x',y') in element)</SUB>)src(x+x',y+y')
</PRE>
<P>函数支持(in-place)模式。膨胀可以重复进行 (<CODE>iterations</SPAN></CODE>) 次. 
对彩色图像,每个彩色通道单独处理。</P>
<HR>

<H3><A name=decl_cvMorphologyEx>MorphologyEx</A></H3>
<P class=Blurb>高级形态学变换</P><PRE>void cvMorphologyEx( const CvArr* src, CvArr* dst, CvArr* temp,
                     IplConvKernel* element, int operation, int iterations=1 );
</PRE>
<P>
<DL>
  <DT>src
  <DD>输入图像. 
  <DT>dst
  <DD>输出图像. 
  <DT>temp
  <DD>临时图像,某些情况下需要 
  <DT>element
  <DD>结构元素 
  <DT>operation
  <DD>形态操作的类型:<BR><CODE>CV_MOP_OPEN</CODE> - 开运算<BR><CODE>CV_MOP_CLOSE</CODE> - 
  闭运算<BR><CODE>CV_MOP_GRADIENT</CODE> - 形态梯度<BR><CODE>CV_MOP_TOPHAT</CODE> - 
  "顶帽"<BR><CODE>CV_MOP_BLACKHAT</CODE> - "黑帽"<BR>
  <DT>iterations
  <DD>膨胀和腐蚀次数. </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_cvMorphologyEx">cvMorphologyEx</A> 
在膨胀和腐蚀基本操作的基础上,完成一些高级的形态变换:</P><PRE>开运算:
dst=open(src,element)=dilate(erode(src,element),element)

闭运算:
dst=close(src,element)=erode(dilate(src,element),element)

形态梯度
dst=morph_grad(src,element)=dilate(src,element)-erode(src,element)

"顶帽":
dst=tophat(src,element)=src-open(src,element)

"黑帽":
dst=blackhat(src,element)=close(src,element)-src
</PRE>
<P>临时图像 <CODE>temp</CODE> 在形态梯度以及对“顶帽”和“黑帽”操作时的 in-place 模式下需要。 </P>
<HR>

<H2><A name=cv_imgproc_filters>滤波器与彩色变换</A></H2>
<HR>

<H3><A name=decl_cvSmooth>Smooth</A></H3>
<P class=Blurb>各种方法的图像平滑</P><PRE>void cvSmooth( const CvArr* src, CvArr* dst,
               int smoothtype=CV_GAUSSIAN,
               int param1=3, int param2=0, double param3=0 );
</PRE>
<P>
<DL>
  <DT>src
  <DD>输入图像. 
  <DT>dst
  <DD>输出图像. 
  <DT>smoothtype
  <DD>平滑方法:
  <UL>
    <LI>CV_BLUR_NO_SCALE (简单不带尺度变换的模糊) - 对每个象素的 
    <CODE>param1</CODE>×<CODE>param2</CODE> 领域求和。如果邻域大小是变化的,可以事先利用函数 <A 
    href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvIntegral">cvIntegral</A> 
    计算积分图像。 
    <LI>CV_BLUR (simple blur) - 
    对每个象素<CODE>param1</CODE>×<CODE>param2</CODE>邻域&nbsp;<CODE></CODE> 求和并做尺度变换 
    1/(<CODE>param1</CODE>&#8226;<CODE>param2</CODE>). 
    <LI>CV_GAUSSIAN (gaussian blur) - 对图像进行核大小为 
    <CODE>param1</CODE>×<CODE>param2</CODE> 的高斯卷积 
    <LI>CV_MEDIAN (median blur) - 
    对图像进行核大小为<CODE>param1</CODE>×<CODE>param1</CODE> 的中值滤波 (i.e. 邻域是方的). 
    <LI>CV_BILATERAL (双向滤波) - 应用双向 3x3 滤波,彩色 sigma=<CODE>param1</CODE>,空间 
    sigma=<CODE>param2</CODE>. 关于双向滤波,可参考 <A 
    href="http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html">http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html</A> 
    </LI></UL>
  <DT>param1
  <DD>平滑操作的第一个参数. 
  <DT>param2
  <DD>平滑操作的第二个参数. 对于简单/非尺度变换的高斯模糊的情况,如果<CODE>param2的值</CODE> 
  为零,则表示其被设定为<CODE>param1。</CODE> 
  <DT>param3
  <DD>对应高斯参数的 Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算:<PRE>              sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 对应水平核,
                                                n=param2 对应垂直核.
              </PRE>对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 
  <CODE>param3</CODE> 不为零,而 <CODE>param1</CODE> 和 <CODE>param2</CODE> 为零,则核大小有 
  sigma 计算 (以保证足够精确的操作). </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_cvSmooth">cvSmooth</A> 
可使用上面任何一种方法平滑图像。每一种方法都有自己的特点以及局限。</P>
<P 
align=left>没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSobel和cvaplace相似)和32位浮点数到32位浮点数的变换格式。</P>
<P>简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特 和 32-比特 浮点图像。这两种方法可以(in-place)方式处理图像。</P>
<P>中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以 in-place 方式处理图像.</P>
<HR>

<H3><A name=decl_cvFilter2D>Filter2D</A></H3>
<P class=Blurb>对图像做卷积</P><PRE>void cvFilter2D( const CvArr* src, CvArr* dst,
                 const CvMat* kernel,
                 CvPoint anchor=cvPoint(-1,-1));
#define cvConvolve2D cvFilter2D
</PRE>
<P>
<DL>
  <DT>src
  <DD>输入图像. 
  <DT>dst
  <DD>输出图像. 
  <DT>kernel
  <DD>卷积核, 单通道浮点矩阵. 如果想要应用不同的核于不同的通道,先用 <A 
  href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cxcore.htm#decl_cvSplit">cvSplit</A> 
  函数分解图像到单个色彩通道上,然后单独处理。 
  <DT>anchor
  <DD>核的锚点表示一个被滤波的点在核内的位置。 锚点应该处于核内部。缺省值 (-1,-1) 表示锚点在核中心。 </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_cvFilter2D">cvFilter2D</A> 
对图像进行线性滤波,支持 In-place 操作。当核运算部分超出输入图像时,函数从最近邻的图像内部象素差值得到边界外面的象素值。 </P>
<HR>

<H3><A name=decl_cvIntegral>Integral</A></H3>
<P class=Blurb>计算积分图像</P><PRE>void cvIntegral( const CvArr* image, CvArr* sum, CvArr* sqsum=NULL, CvArr* tilted_sum=NULL );
</PRE>
<P>
<DL>
  <DT>image
  <DD>输入图像, <CODE>W</CODE>×<CODE>H</CODE>, 单通道,8位或浮点 (32f 或 64f). 
  <DT>sum
  <DD>积分图像, 
  <CODE>W+1</CODE>×<CODE>H+1(译者注:原文的公式应该写成(W+1)</CODE>×<CODE>(H+1),避免误会)</CODE>, 
  单通道,32位整数或 double 精度的浮点数(64f). 
  <DT>sqsum
  <DD>对象素值平方的积分图像,<CODE>W+1</CODE>×<CODE>H+1(译者注:原文的公式应该写成(W+1)</CODE>×<CODE>(H+1),避免误会)</CODE>, 
  单通道,32位整数或 double 精度的浮点数 (64f). 
  <DT>tilted_sum
  <DD>旋转45度的积分图像,单通道,32位整数或 double 精度的浮点数 (64f). </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_cvIntegral">cvIntegral</A> 
计算一次或高次积分图像:</P><PRE>sum(X,Y)=sum<SUB>x&lt;X,y&lt;Y</SUB>image(x,y)

sqsum(X,Y)=sum<SUB>x&lt;X,y&lt;Y</SUB>image(x,y)<SUP>2</SUP>

tilted_sum(X,Y)=sum<SUB>y&lt;Y,abs(x-X)&lt;y</SUB>image(x,y)
</PRE>
<P>利用积分图像,可以计算在某象素的上-右方的或者旋转的矩形区域中进行求和、求均值以及标准方差的计算,并且保证运算的复杂度为O(1)。例如:</P>
<P><BR>sum<SUB>x1&lt;=x&lt;x2,y1&lt;=y&lt;y2</SUB>image(x,y)=sum(x2,y2)-sum(x1,y2)-sum(x2,y1)+sum(x1,x1)<BR></P>
<P>因此可以在变化的窗口内做快速平滑或窗口相关等操作。 </P>
<HR>

<H3><A name=decl_cvCvtColor>CvtColor</A></H3>
<P class=Blurb>色彩空间转换</P><PRE>void cvCvtColor( const CvArr* src, CvArr* dst, int code );
</PRE>
<P>
<DL>
  <DT>src
  <DD>输入的 8-比特 或浮点图像. 
  <DT>dst
  <DD>输出的 8-比特 或浮点图像. 
  <DT>code
  <DD>色彩空间转换,通过定义 CV_&lt;src_color_space&gt;2&lt;dst_color_space&gt; 常数 (见下面). 
  </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_cvCvtColor">cvCvtColor</A> 
将输入图像从一个色彩空间转换为另外一个色彩空间。函数忽略 <CODE>IplImage</CODE> 头中定义的 <CODE>colorModel</CODE> 
和 <CODE>channelSeq</CODE> 域,所以输入图像的色彩空间应该正确指定 (包括通道的顺序,对RGB空间而言,BGR 意味着布局为 
B<SUB>0</SUB> G<SUB>0</SUB> R<SUB>0</SUB> B<SUB>1</SUB> G<SUB>1</SUB> 
R<SUB>1</SUB> ... 层叠的 24-位格式,而 RGB 意味着布局为 R<SUB>0</SUB> G<SUB>0</SUB> 
B<SUB>0</SUB> R<SUB>1</SUB> G<SUB>1</SUB> B<SUB>1</SUB> ... 层叠的24-位格式. 函数做如下变换:
<UL>
  <LI>RGB 空间内部的变换,如增加/删除 alpha 通道,反相通道顺序,到16位&nbsp; 
  RGB彩色或者15位RGB彩色的正逆转换(Rx5:Gx6:Rx5),以及到灰度图像的正逆转换,使用: <PRE>RGB[A]-&gt;Gray: Y=0.212671*R + 0.715160*G + 0.072169*B + 0*A
Gray-&gt;RGB[A]: R=Y G=Y B=Y A=0
</PRE>
  <P>所有可能的图像色彩空间的相互变换公式列举如下:</P>
  <P></P>
  <LI>RGB&lt;=&gt;XYZ (CV_BGR2XYZ, CV_RGB2XYZ, CV_XYZ2BGR, CV_XYZ2RGB): <PRE>|X|   |0.412411  0.357585  0.180454| |R|
|Y| = |0.212649  0.715169  0.072182|*|G|
|Z|   |0.019332  0.119195  0.950390| |B|

|R|   | 3.240479  -1.53715  -0.498535| |X|
|G| = |-0.969256   1.875991  0.041556|*|Y|
|B|   | 0.055648  -0.204043  1.057311| |Z|
</PRE>
  <P></P>
  <LI>RGB&lt;=&gt;YCrCb (CV_BGR2YCrCb, CV_RGB2YCrCb, CV_YCrCb2BGR, CV_YCrCb2RGB) 
<PRE>Y=0.299*R + 0.587*G + 0.114*B
Cr=(R-Y)*0.713 + 128
Cb=(B-Y)*0.564 + 128

R=Y + 1.403*(Cr - 128)
G=Y - 0.344*(Cr - 128) - 0.714*(Cb - 128)
B=Y + 1.773*(Cb - 128)
</PRE>
  <P></P>
  <LI>RGB=&gt;HSV (CV_BGR2HSV,CV_RGB2HSV) <PRE>V=max(R,G,B)
S=(V-min(R,G,B))*255/V   if V!=0, 0 otherwise

       (G - B)*60/S,  if V=R
H= 180+(B - R)*60/S,  if V=G
   240+(R - G)*60/S,  if V=B

if H&lt;0 then H=H+360
</PRE>
  <P>使用上面从 0° 到 360° 变化的公式计算色调(hue)值,确保它们被 2 除后能适用于8位。 </P>
  <P></P>
  <LI>RGB=&gt;Lab (CV_BGR2Lab, CV_RGB2Lab) <PRE>|X|   |0.433910  0.376220  0.189860| |R/255|
|Y| = |0.212649  0.715169  0.072182|*|G/255|
|Z|   |0.017756  0.109478  0.872915| |B/255|

L = 116*Y<SUP>1/3</SUP>      for Y&gt;0.008856
L = 903.3*Y      for Y&lt;=0.008856

a = 500*(f(X)-f(Y))
b = 200*(f(Y)-f(Z))
where f(t)=t<SUP>1/3</SUP>              for t&gt;0.008856
      f(t)=7.787*t+16/116   for t&lt;=0.008856
</PRE>上面的公式可以参考 <A 
  href="http://www.cica.indiana.edu/cica/faq/color_spaces/color.spaces.html">http://www.cica.indiana.edu/cica/faq/color_spaces/color.spaces.html</A> 

  <P></P>
  <LI>Bayer=&gt;RGB (CV_BayerBG2BGR, CV_BayerGB2BGR, CV_BayerRG2BGR, 
  CV_BayerGR2BGR,<BR>CV_BayerBG2RGB, CV_BayerRG2BGR, CV_BayerGB2RGB, 
  CV_BayerGR2BGR,<BR>CV_BayerRG2RGB, CV_BayerBG2BGR, CV_BayerGR2RGB, 
  CV_BayerGB2BGR)
  <P>Bayer 模式被广泛应用于 CCD 和 CMOS 摄像头. 它允许从一个单独平面中得到彩色图像,该平面中的 R/G/B 象素点被安排如下:</P>
  <P>
  <TABLE width=400 border=0>
    <TBODY>

⌨️ 快捷键说明

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