?? opencv 圖像處理和計算機視覺參考手冊.htm
字號:
<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>鄰域 <CODE></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">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<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>利用積分圖像,可以計算在某象素的上-右方的或者旋轉的矩形區域中進行求和、求均值以及標準方差的計算,并且保證運算的復雜度為O(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="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位
RGB彩色或者15位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">http://www.cica.indiana.edu/cica/faq/color_spaces/color.spaces.html</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>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -