?? opencv 圖像處理和計(jì)算機(jī)視覺參考手冊(cè).htm
字號(hào):
| A<SUB>21</SUB> A<SUB>22</SUB> b<SUB>2</SUB> |
</PRE>
<P>其中在非整數(shù)坐標(biāo) A•(x,y)<SUP>T</SUP>+b 的象素點(diǎn)值通過雙線性變換得到。多通道圖像的每一個(gè)通道都單獨(dú)計(jì)算.</P>
<H4><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">例子:使用</SPAN>
cvGetQuadrangleSubPix <SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">進(jìn)行圖像旋轉(zhuǎn)</SPAN></H4><PRE>#include "cv.h"
#include "highgui.h"
#include "math.h"
int main( int argc, char** argv )
{
IplImage* src;
/* the first command line parameter must be image file name */
if( argc==2 && (src = cvLoadImage(argv[1], -1))!=0)
{
IplImage* dst = cvCloneImage( src );
int delta = 1;
int angle = 0;
cvNamedWindow( "src", 1 );
cvShowImage( "src", src );
for(;;)
{
float m[6];
double factor = (cos(angle*CV_PI/180.) + 1.1)*3;
CvMat M = cvMat( 2, 3, CV_32F, m );
int w = src->width;
int h = src->height;
m[0] = (float)(factor*cos(-angle*2*CV_PI/180.));
m[1] = (float)(factor*sin(-angle*2*CV_PI/180.));
m[2] = w*0.5f;
m[3] = -m[1];
m[4] = m[0];
m[5] = h*0.5f;
cvGetQuadrangleSubPix( src, dst, &M, 1, cvScalarAll(0));
cvNamedWindow( "dst", 1 );
cvShowImage( "dst", dst );
if( cvWaitKey(5) == 27 )
break;
angle = (angle + delta) % 360;
}
}
return 0;
}
</PRE>
<HR>
<H3><A name=decl_cvResize>Resize</A></H3>
<P class=Blurb><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">圖像大小變換</SPAN></P><PRE>void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR );
</PRE>
<P>
<DL>
<DT>src
<DD>輸入圖像.
<DT>dst
<DD>輸出圖像.
<DT>interpolation
<DD>差值方法:
<UL>
<LI>CV_INTER_NN - 最近鄰差值,
<LI>CV_INTER_LINEAR - 雙線性差值 (缺省使用)
<LI>CV_INTER_AREA - 使用象素關(guān)系重采樣。當(dāng)圖像縮小時(shí)候,該方法可以避免波紋出現(xiàn)。當(dāng)圖像放大時(shí),類似于
<CODE>CV_INTER_NN</SPAN></CODE> 方法..
<LI>CV_INTER_CUBIC - 立方差值. </LI></UL></DD></DL>
<P>函數(shù) <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvResize">cvResize</A>
將圖像 <CODE>src</SPAN></CODE> 改變尺寸得到與 <CODE>dst 同樣大小。</SPAN></CODE>若設(shè)定
ROI,函數(shù)將按常規(guī)支持 ROI.</P>
<HR>
<H3><A name=decl_cvWarpAffine>WarpAffine</A></H3>
<P class=Blurb><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">對(duì)圖像做仿射變換</SPAN></P><PRE>void cvWarpAffine( const CvArr* src, CvArr* dst, const CvMat* map_matrix,
int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,
CvScalar fillval=cvScalarAll(0) );
</PRE>
<P>
<DL>
<DT>src
<DD>輸入圖像.
<DT>dst
<DD>輸出圖像.
<DT>map_matrix
<DD>2×3 變換矩陣
<DT>flags
<DD>插值方法和以下開關(guān)選項(xiàng)的組合:
<UL>
<LI>CV_WARP_FILL_OUTLIERS - 填充所有縮小圖像的象素。如果部分象素落在輸入圖像的邊界外,那么它們的值設(shè)定為
<CODE>fillval</CODE>.
<LI>CV_WARP_INVERSE_MAP - 指定 <CODE>matrix</SPAN></CODE>
是輸出圖像到輸入圖像的反變換,因此可以直接用來做象素差值。否則, 函數(shù)從 <CODE>map_matrix 得到反變換。</CODE> </LI></UL>
<DT>fillval
<DD>用來填充邊界外面的值 </DD></DL>
<P>函數(shù) <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvWarpAffine">cvWarpAffine</A>
利用下面指定的矩陣變換輸入圖像:</P><PRE>dst(x&apos;,y&apos;)<-src(x,y)
如果沒有指定 CV_WARP_INVERSE_MAP , (x&apos;,y&apos;)<SUP>T</SUP>=map_matrix•(x,y,1)<SUP>T</SUP>+b ,
否則, (x, y)<SUP>T</SUP>=map_matrix•(x&apos;,y&apos,1)<SUP>T</SUP>+b
</PRE>
<P>函數(shù)與 <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvGetQuadrangleSubPix">cvGetQuadrangleSubPix</A>
類似,但是不完全相同。 <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvWarpAffine">cvWarpAffine</A>
要求輸入和輸出圖像具有同樣的數(shù)據(jù)類型,有更大的資源開銷(因此對(duì)小圖像不太合適)而且輸出圖像的部分可以保留不變。而 <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvGetQuadrangleSubPix">cvGetQuadrangleSubPix</A>
可以精確地從8位圖像中提取四邊形到浮點(diǎn)數(shù)緩存區(qū)中,具有比較小的系統(tǒng)開銷,而且總是全部改變輸出圖像的內(nèi)容。 </P>
<P>要變換稀疏矩陣,使用 cxcore 中的函數(shù) <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvTransform">cvTransform</A>
。</P>
<HR>
<H3><A name=decl_cv2DRotationMatrix>2DRotationMatrix</A></H3>
<P class=Blurb><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">計(jì)算二維旋轉(zhuǎn)的仿射變換矩陣</SPAN></P><PRE>CvMat* cv2DRotationMatrix( CvPoint2D32f center, double angle,
double scale, CvMat* map_matrix );
</PRE>
<P>
<DL>
<DT>center
<DD>輸入圖像的旋轉(zhuǎn)中心坐標(biāo)
<DT>angle
<DD>旋轉(zhuǎn)角度(度)。正值表示逆時(shí)針旋轉(zhuǎn)(坐標(biāo)原點(diǎn)假設(shè)在左上角).
<DT>scale
<DD>各項(xiàng)同性的尺度因子
<DT>map_matrix
<DD>輸出 2×3 矩陣的指針 </DD></DL>
<P>函數(shù) <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cv2DRotationMatrix">cv2DRotationMatrix</A>
計(jì)算矩陣:</P><PRE>[ α β | (1-α)*center.x - β*center.y ]
[ -β α | β*center.x + (1-α)*center.y ]
where α=scale*cos(angle), β=scale*sin(angle)
</PRE>
<P>該變換并不改變?cè)夹D(zhuǎn)中心點(diǎn)的坐標(biāo),如果這不是操作目的,則可以通過調(diào)整平移量改變其坐標(biāo)(譯者注:通過簡單的推導(dǎo)可知,放射變換的實(shí)現(xiàn)是首先將旋轉(zhuǎn)中心置為坐標(biāo)原點(diǎn),再進(jìn)行旋轉(zhuǎn)和尺度變換,最后重新將坐標(biāo)原點(diǎn)設(shè)定為輸入圖像的左上角,這里的平移量是center.x,
center.y).</P>
<HR>
<H3><A name=decl_cvWarpPerspective>WarpPerspective</A></H3>
<P class=Blurb><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">對(duì)圖像進(jìn)行透視變換</SPAN></P><PRE>void cvWarpPerspective( const CvArr* src, CvArr* dst, const CvMat* map_matrix,
int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,
CvScalar fillval=cvScalarAll(0) );
</PRE>
<P>
<DL>
<DT>src
<DD>輸入圖像.
<DT>dst
<DD>輸出圖像.
<DT>map_matrix
<DD>3×3 變換矩陣
<DT>flags
<DD>插值方法和以下開關(guān)選項(xiàng)的組合:
<UL>
<LI>CV_WARP_FILL_OUTLIERS - 填充所有縮小圖像的象素。如果部分象素落在輸入圖像的邊界外,那么它們的值設(shè)定為
<CODE>fillval</CODE>.
<LI>CV_WARP_INVERSE_MAP - 指定 <CODE>matrix</SPAN></CODE>
是輸出圖像到輸入圖像的反變換,因此可以直接用來做象素差值。否則, 函數(shù)從 <CODE>map_matrix 得到反變換。</CODE> </LI></UL>
<DT>fillval
<DD>用來填充邊界外面的值 </DD></DL>
<P>函數(shù) <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvWarpPerspective">cvWarpPerspective</A>
利用下面指定矩陣變換輸入圖像:</P><PRE>dst(x&apos;,y&apos;)<-src(x,y)
若指定 CV_WARP_INVERSE_MAP, (tx&apos;,ty&apos;,t)<SUP>T</SUP>=map_matrix•(x,y,1)<SUP>T</SUP>+b
否則, (tx, ty, t)<SUP>T</SUP>=map_matrix•(x&apos;,y&apos,1)<SUP>T</SUP>+b
</PRE>
<P>要變換稀疏矩陣,使用 cxcore 中的函數(shù) <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvTransform">cvTransform</A>
。</P>
<HR>
<H3><A name=decl_cvWarpPerspectiveQMatrix>WarpPerspectiveQMatrix</A></H3>
<P class=Blurb><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">用</SPAN>4<SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">個(gè)對(duì)應(yīng)點(diǎn)計(jì)算透視變換矩陣</SPAN></P><PRE>CvMat* cvWarpPerspectiveQMatrix( const CvPoint2D32f* src,
const CvPoint2D32f* dst,
CvMat* map_matrix );
</PRE>
<P>
<DL>
<DT>src
<DD>輸入圖像的四邊形的4個(gè)點(diǎn)坐標(biāo)
<DT>dst
<DD>輸出圖像的對(duì)應(yīng)四邊形的4個(gè)點(diǎn)坐標(biāo)
<DT>map_matrix
<DD>輸出的 3×3 矩陣 </DD></DL>
<P>函數(shù) <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvWarpPerspectiveQMatrix">cvWarpPerspectiveQMatrix</A>
計(jì)算透視變換矩陣,使得:</P><PRE>(t<SUB>i</SUB>x'<SUB>i</SUB>,t<SUB>i</SUB>y'<SUB>i</SUB>,t<SUB>i</SUB>)<SUP>T</SUP>=matrix•(x<SUB>i</SUB>,y<SUB>i</SUB>,1)<SUP>T</SUP>
</PRE>
<P>其中 <CODE>dst(i)=(x'<SUB>i</SUB>,y'<SUB>i</SUB>),
src(i)=(x<SUB>i</SUB>,y<SUB>i</SUB>), i=0..3</CODE>.</P>
<HR>
<H2><A name=cv_imgproc_morphology>形態(tài)學(xué)操作</A></H2>
<HR>
<H3><A
name=decl_cvCreateStructuringElementEx>CreateStructuringElementEx</A></H3>
<P class=Blurb><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">創(chuàng)建結(jié)構(gòu)元素</SPAN></P><PRE>IplConvKernel* cvCreateStructuringElementEx( int cols, int rows, int anchor_x, int anchor_y,
int shape, int* values=NULL );
</PRE>
<P>
<DL>
<DT>cols
<DD>結(jié)構(gòu)元素的列數(shù)目
<DT>rows
<DD>結(jié)構(gòu)元素的行數(shù)目
<DT>anchor_x
<DD>錨點(diǎn)的相對(duì)水平偏移量
<DT>anchor_y
<DD>錨點(diǎn)的相對(duì)垂直便宜量
<DT>shape
<DD>結(jié)構(gòu)元素的形狀,可以是下列值:
<UL>
<LI><CODE>CV_SHAPE_RECT</CODE>, 長方形元素;
<LI><CODE>CV_SHAPE_CROSS</CODE>, 交錯(cuò)元素 a cross-shaped element;
<LI><CODE>CV_SHAPE_ELLIPSE</CODE>, 橢圓元素;
<LI><CODE>CV_SHAPE_CUSTOM</CODE>, 用戶自定義元素。這種情況下參數(shù) <CODE>values</SPAN></CODE>
定義了 mask,即象素的那個(gè)鄰域必須考慮。 </LI></UL>
<DT>values
<DD>指向結(jié)構(gòu)元素的指針,它是一個(gè)平面數(shù)組,表示對(duì)元素矩陣逐行掃描。(非零點(diǎn)表示該點(diǎn)屬于結(jié)構(gòu)元)。如果指針為空,則表示平面數(shù)組中的所有元素都是非零的,即結(jié)構(gòu)元是一個(gè)長方形(該參數(shù)僅僅當(dāng)shape參數(shù)是
<CODE>CV_SHAPE_CUSTOM</CODE> 時(shí)才予以考慮)。 </DD></DL>
<P>函數(shù) <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cv CreateStructuringElementEx">cv
CreateStructuringElementEx</A> 分配和填充結(jié)構(gòu) <CODE>IplConvKernel</SPAN></CODE>,
它可作為形態(tài)操作中的結(jié)構(gòu)元素。</P>
<HR>
<H3><A name=decl_cvReleaseStructuringElement>ReleaseStructuringElement</A></H3>
<P class=Blurb><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">刪除結(jié)構(gòu)元素</SPAN></P><PRE>void cvReleaseStructuringElement( IplConvKernel** element );
</PRE>
<P>
<DL>
<DT>element
<DD>被刪除的結(jié)構(gòu)元素的指針 </DD></DL>
<P>函數(shù) <A
href="http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm#decl_cvReleaseStructuringElement">cvReleaseStructuringElement</A>
釋放結(jié)構(gòu) <CODE>IplConvKernel 。</SPAN></CODE>如果 <CODE>*element</SPAN></CODE> 為
<CODE>NULL</SPAN></CODE>, 則函數(shù)不作用。</P>
<HR>
<H3><A name=decl_cvErode>Erode</A></H3>
<P class=Blurb><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: Helvetica; mso-hansi-font-family: Helvetica">使用任意結(jié)構(gòu)元素腐蝕圖像</SPAN></P><PRE>void cvErode( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );
</PRE>
<P>
<DL>
<DT>src
<DD>輸入圖像.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -