📄 opencv用户手册之图像处理部分(之四):滤波器与色彩转换(中文翻译) - hunnish的opencv专栏.htm
字号:
<DT>smoothtype
<DD>平滑方法:
<UL>
<LI>CV_BLUR_NO_SCALE (简单不带尺度变换的模糊) - 对每个象素领域
<CODE>param1</CODE>×<CODE>param2</CODE> 求和。如果邻域大小是变化的,可以事先利用函数 <A
href="file:///D:/程序/OpenCV/docs/ref/opencvref_cv.HTM#decl_cvIntegral"><FONT
color=#002c99>cvIntegral</FONT></A> 计算积分图像。
<LI>CV_BLUR (simple blur) - 对每个象素邻域 <CODE>param1</CODE>×<CODE>param2</CODE>
求和并做尺度变换 1/(<CODE>param1</CODE>•<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"><FONT
color=#002c99>http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html</FONT></A>
</LI></UL>
<DT>param1
<DD>平滑操作的第一个参数.
<DT>param2
<DD>平滑操作的第二个参数. <CODE>param2</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="file:///D:/程序/OpenCV/docs/ref/opencvref_cv.HTM#decl_cvSmooth"><FONT
color=#002c99>cvSmooth</FONT></A> 可使用上面任何一种方法平滑图像。每一种方法都有自己的特点以及局限。</P>
<P>没有缩放的图像平滑仅支持单通道图像,并且支持8位、16位、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="file:///D:/程序/OpenCV/docs/ref/opencvref_cxcore.htm#decl_cvSplit"><FONT
color=#002c99>cvSplit</FONT></A> 函数分解图像到单个色彩通道上,然后单独处理。
<DT>anchor
<DD>核的锚点表示一个被滤波的点在核内的位置。 锚点应该处于核内部。缺省值 (-1,-1) 表示锚点在核中心。 </DD></DL>
<P>函数 <A
href="file:///D:/程序/OpenCV/docs/ref/opencvref_cv.HTM#decl_cvFilter2D"><FONT
color=#002c99>cvFilter2D</FONT></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</CODE>, 单通道,32位整数或 double 精度的浮点数(64f).
<DT>sqsum
<DD>对象素值平方的积分图像,<CODE>W+1</CODE>×<CODE>H+1</CODE>, 单通道,32位整数或 double 精度的浮点数
(64f).
<DT>tilted_sum
<DD>旋转45度的积分图像,单通道,32位整数或 double 精度的浮点数 (64f). </DD></DL>
<P>函数 <A
href="file:///D:/程序/OpenCV/docs/ref/opencvref_cv.HTM#decl_cvIntegral"><FONT
color=#002c99>cvIntegral</FONT></A> 计算一次或高次积分图像:</P><PRE>sum(X,Y)=sum<SUB>x<X,y<Y</SUB>image(x,y)
sqsum(X,Y)=sum<SUB>x<X,y<Y</SUB>image(x,y)<SUP>2</SUP>
tilted_sum(X,Y)=sum<SUB>y<Y,abs(x-X)<y</SUB>image(x,y)
</PRE>
<P>利用积分图像,可以方便得到某个区域象素点的和、均值、标准方差或在 0(1) 的选择角度。例如:</P>
<P><BR>sum<SUB>x1<=x<x2,y1<=y<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_<src_color_space>2<dst_color_space> 常数 (见下面).
</DD></DL>
<P>函数 <A
href="file:///D:/程序/OpenCV/docs/ref/opencvref_cv.HTM#decl_cvCvtColor"><FONT
color=#002c99>cvCvtColor</FONT></A> 将输入图像从一个色彩空间转换为另外一个色彩空间。函数忽略
<CODE>IplImage</CODE> 头中定义的 <CODE>colorModel</CODE> 和 <CODE>channelSeq</CODE>
域,所以输入图像的色彩空间应该正确指定 (包括通道的顺序,对RGB空间而言,BGR 意味着 24-位格式,其排列为 B<SUB>0</SUB>
G<SUB>0</SUB> R<SUB>0</SUB> B<SUB>1</SUB> G<SUB>1</SUB> R<SUB>1</SUB> ... 层叠,而
RGB 意味着 24-位格式,其排列为 R<SUB>0</SUB> G<SUB>0</SUB> B<SUB>0</SUB> R<SUB>1</SUB>
G<SUB>1</SUB> B<SUB>1</SUB> ... 层叠). 函数做如下变换:
<UL>
<LI>RGB 空间内部的变换,如增加/删除 alpha 通道,反相通道顺序,16位
RGB彩色变换(Rx5:Gx6:Rx5),以及灰度图像的变换,使用: <PRE>RGB[A]->Gray: Y=0.212671*R + 0.715160*G + 0.072169*B + 0*A
Gray->RGB[A]: R=Y G=Y B=Y A=0
</PRE>
<P>所有可能的图像色彩空间的相互变换公式列举如下:</P>
<P></P>
<LI>RGB<=>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<=>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=>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<0 then H=H+360
</PRE>
<P>使用上面从 0° 到 360° 变化的公式计算色调(hue)值,确保它们被 2 除后能试用于8位。 </P>
<P></P>
<LI>RGB=>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>0.008856
L = 903.3*Y for Y<=0.008856
a = 500*(f(X)-f(Y))
b = 200*(f(Y)-f(Z))
where f(t)=t<SUP>1/3</SUP> for t>0.008856
f(t)=7.787*t+16/116 for t<=0.008856
</PRE>上面的公式可以参考 <A
href="http://www.cica.indiana.edu/cica/faq/color_spaces/color.spaces.html"><FONT
color=#002c99>http://www.cica.indiana.edu/cica/faq/color_spaces/color.spaces.html</FONT></A>
<P></P>
<LI>Bayer=>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>
<TR>
<TD><FONT color=#ff0000 size=5>
<P align=center>R</FONT></P></TD>
<TD><FONT color=#008000 size=5>
<P align=center>G</FONT></P></TD>
<TD><FONT color=#ff0000 size=5>
<P align=center>R</FONT></P></TD>
<TD><FONT color=#008000 size=5>
<P align=center>G</FONT></P></TD>
<TD><FONT color=#ff0000 size=5>
<P align=center>R</FONT></P></TD></TR>
<TR>
<TD><FONT color=#008000 size=5>
<P align=center>G</FONT></P></TD>
<TD bgColor=pink><FONT color=#0000ff size=5>
<P align=center>B</FONT></P></TD>
<TD bgColor=pink><FONT color=#008000 size=5>
<P align=center>G</FONT></P></TD>
<TD><FONT color=#0000ff size=5>
<P align=center>B</FONT></P></TD>
<TD><FONT color=#008000 size=5>
<P align=center>G</FONT></P></TD></TR>
<TR>
<TD><FONT color=#ff0000 size=5>
<P align=center>R</FONT></P></TD>
<TD><FONT color=#008000 size=5>
<P align=center>G</FONT></P></TD>
<TD><FONT color=#ff0000 size=5>
<P align=center>R</FONT></P></TD>
<TD><FONT color=#008000 size=5>
<P align=center>G</FONT></P></TD>
<TD><FONT color=#ff0000 size=5>
<P align=center>R</FONT></P></TD></TR>
<TR>
<TD><FONT color=#008000 size=5>
<P align=center>G</FONT></P></TD>
<TD><FONT color=#0000ff size=5>
<P align=center>B</FONT></P></TD>
<TD><FONT color=#008000 size=5>
<P align=center>G</FONT></P></TD>
<TD><FONT color=#0000ff size=5>
<P align=center>B</FONT></P></TD>
<TD><FONT color=#008000 size=5>
<P align=center>G</FONT></P></TD></TR>
<TR>
<TD><FONT color=#ff0000 size=5>
<P align=center>R</FONT></P></TD>
<TD><FONT color=#008000 size=5>
<P align=center>G</FONT></P></TD>
<TD><FONT color=#ff0000 size=5>
<P align=center>R</FONT></P></TD>
<TD><FONT color=#008000 size=5>
<P align=center>G</FONT></P></TD>
<TD><FONT color=#ff0000 size=5>
<P align=center>R</FONT></P></TD></TR>
<TR>
<TD><FONT color=#008000 size=5>
<P align=center>G</FONT></P></TD>
<TD><FONT color=#0000ff size=5>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -