opencv中文手冊_第1頁
opencv中文手冊_第2頁
opencv中文手冊_第3頁
opencv中文手冊_第4頁
opencv中文手冊_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、目錄· 1 梯度、邊緣和角點(diǎn) o 1.1 Sobel o 1.2 Laplace o 1.3 Canny o 1.4 PreCornerDetect o 1.5 CornerEigenValsAndVecs o 1.6 CornerMinEigenVal o 1.7 CornerHarris o 1.8 FindCornerSubPix o 1.9 GoodFeaturesToTrack · 2 采樣、插值和幾何變換 o 2.1 InitLineIterator o 2.2 SampleLine o 2.3 GetRectSubPix o 2.4 GetQuadrangle

2、SubPix o 2.5 Resize o 2.6 WarpAffine o 2.7 GetAffineTransform o 2.8 2DRotationMatrix o 2.9 WarpPerspective o 2.10 WarpPerspectiveQMatrix o 2.11 GetPerspectiveTransform o 2.12 Remap o 2.13 LogPolar · 3 形態(tài)學(xué)操作 o 3.1 CreateStructuringElementEx o 3.2 ReleaseStructuringElement o 3.3 Erode o 3.4 Dilat

3、e o 3.5 MorphologyEx · 4 濾波器與色彩空間變換 o 4.1 Smooth o 4.2 Filter2D o 4.3 CopyMakeBorder o 4.4 Integral o 4.5 CvtColor o 4.6 Threshold o 4.7 AdaptiveThreshold · 5 金字塔及其應(yīng)用 o 5.1 PyrDown o 5.2 PyrUp · 6 連接部件 o 6.1 CvConnectedComp o 6.2 FloodFill o 6.3 FindContours o 6.4 StartFindContours o

4、6.5 FindNextContour o 6.6 SubstituteContour o 6.7 EndFindContours o 6.8 PyrSegmentation o 6.9 PyrMeanShiftFiltering o 6.10 Watershed · 7 圖像與輪廓矩 o 7.1 Moments o 7.2 GetSpatialMoment o 7.3 GetCentralMoment o 7.4 GetNormalizedCentralMoment o 7.5 GetHuMoments · 8 特殊圖像變換 o 8.1 HoughLines o 8.2

5、HoughCircles o 8.3 DistTransform o 8.4 Inpaint · 9 直方圖 o 9.1 CvHistogram o 9.2 CreateHist o 9.3 SetHistBinRanges o 9.4 ReleaseHist o 9.5 ClearHist o 9.6 MakeHistHeaderForArray o 9.7 QueryHistValue_1D o 9.8 GetHistValue_1D o 9.9 GetMinMaxHistValue o 9.10 NormalizeHist o 9.11 ThreshHist o 9.12 Co

6、mpareHist o 9.13 CopyHist o 9.14 CalcHist o 9.15 CalcBackProject o 9.16 CalcBackProjectPatch o 9.17 CalcProbDensity o 9.18 EqualizeHist · 10 匹配 o 10.1 MatchTemplate o 10.2 MatchShapes o 10.3 CalcEMD2 梯度、邊緣和角點(diǎn)Sobel使用擴(kuò)展 Sobel 算子計(jì)算一階、二階、三階或混合圖像差分void cvSobel( const CvArr* src, CvArr* dst, int xord

7、er, int yorder, int aperture_size=3 );src 輸入圖像. dst 輸出圖像. xorder x 方向上的差分階數(shù) yorder y 方向上的差分階數(shù) aperture_size 擴(kuò)展 Sobel 核的大小,必須是 1, 3, 5 或 7。 除了尺寸為 1, 其它情況下, aperture_size ×aperture_size 可分離內(nèi)核將用來計(jì)算差分。對 aperture_size=1的情況, 使用 3x1 或 1x3 內(nèi)核 (不進(jìn)行高斯平滑操作)。這里有一個(gè)特殊變量 CV_SCHARR (=-1),對應(yīng) 3x3 Scharr 濾波器,可以給出

8、比 3x3 Sobel 濾波更精確的結(jié)果。Scharr 濾波器系數(shù)是: 對 x-方向 或矩陣轉(zhuǎn)置后對 y-方向。函數(shù) cvSobel 通過對圖像用相應(yīng)的內(nèi)核進(jìn)行卷積操作來計(jì)算圖像差分:由于Sobel 算子結(jié)合了 Gaussian 平滑和微分,所以,其結(jié)果或多或少對噪聲有一定的魯棒性。通常情況,函數(shù)調(diào)用采用如下參數(shù) (xorder=1, yorder=0, aperture_size=3) 或 (xorder=0, yorder=1, aperture_size=3) 來計(jì)算一階 x- 或 y- 方向的圖像差分。第一種情況對應(yīng):核。第二種對應(yīng):或者核的選則依賴于圖像原點(diǎn)的定義 (origin 來

9、自 IplImage 結(jié)構(gòu)的定義)。由于該函數(shù)不進(jìn)行圖像尺度變換,所以和輸入圖像(數(shù)組)相比,輸出圖像(數(shù)組)的元素通常具有更大的絕對數(shù)值(譯者注:即像素的位深)。為防止溢出,當(dāng)輸入圖像是 8 位的,要求輸出圖像是 16 位的。當(dāng)然可以用函數(shù) cvConvertScale 或 cvConvertScaleAbs 轉(zhuǎn)換為 8 位的。除了 8-位 圖像,函數(shù)也接受 32-位 浮點(diǎn)數(shù)圖像。所有輸入和輸出圖像都必須是單通道的,并且具有相同的圖像尺寸或者ROI尺寸。Laplace計(jì)算圖像的 Laplacian 變換void cvLaplace( const CvArr* src, CvArr* dst,

10、 int aperture_size=3 );src 輸入圖像. dst 輸出圖像. aperture_size 核大小 (與 cvSobel 中定義一樣). 函數(shù) cvLaplace 計(jì)算輸入圖像的 Laplacian變換,方法是先用 sobel 算子計(jì)算二階 x- 和 y- 差分,再求和:對 aperture_size=1 則給出最快計(jì)算結(jié)果,相當(dāng)于對圖像采用如下內(nèi)核做卷積:類似于 cvSobel 函數(shù),該函數(shù)也不作圖像的尺度變換,所支持的輸入、輸出圖像類型的組合和cvSobel一致。Canny采用 Canny 算法做邊緣檢測void cvCanny( const CvArr* image

11、, CvArr* edges, double threshold1, double threshold2, int aperture_size=3 );image 單通道輸入圖像. edges 單通道存儲(chǔ)邊緣的輸出圖像 threshold1 第一個(gè)閾值 threshold2 第二個(gè)閾值 aperture_size Sobel 算子內(nèi)核大小 (見 cvSobel). 函數(shù) cvCanny 采用 CANNY 算法發(fā)現(xiàn)輸入圖像的邊緣而且在輸出圖像中標(biāo)識(shí)這些邊緣。threshold1和threshold2 當(dāng)中的小閾值用來控制邊緣連接,大的閾值用來控制強(qiáng)邊緣的初始分割。· 注意事項(xiàng):cvCa

12、nny只接受單通道圖像作為輸入。 · 外部鏈接:經(jīng)典的canny自調(diào)整閾值算法的一個(gè)opencv的實(shí)現(xiàn)見在OpenCV中自適應(yīng)確定canny算法的分割門限 PreCornerDetect計(jì)算用于角點(diǎn)檢測的特征圖,void cvPreCornerDetect( const CvArr* image, CvArr* corners, int aperture_size=3 );image 輸入圖像. corners 保存候選角點(diǎn)的特征圖 aperture_size Sobel 算子的核大小(見cvSobel). 函數(shù) cvPreCornerDetect 計(jì)算函數(shù)其中D表示一階圖像差分,

13、表示二階圖像差分。 角點(diǎn)被認(rèn)為是函數(shù)的局部最大值:/ 假設(shè)圖像格式為浮點(diǎn)數(shù)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 );cvSubS( corners, dilated_corn

14、ers, corners );cvCmpS( corners, 0, corner_mask, CV_CMP_GE );cvReleaseImage( &corners );cvReleaseImage( &dilated_corners );CornerEigenValsAndVecs計(jì)算圖像塊的特征值和特征向量,用于角點(diǎn)檢測void cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv, int block_size, int aperture_size=3 );image 輸入圖像. eigenvv 保存

15、結(jié)果的數(shù)組。必須比輸入圖像寬 6 倍。 block_size 鄰域大小 (見討論). aperture_size Sobel 算子的核尺寸(見 cvSobel). 對每個(gè)象素,函數(shù) cvCornerEigenValsAndVecs 考慮 block_size × block_size 大小的鄰域 S(p),然后在鄰域上計(jì)算圖像差分的相關(guān)矩陣:然后它計(jì)算矩陣的特征值和特征向量,并且按如下方式(1, 2, x1, y1, x2, y2)存儲(chǔ)這些值到輸出圖像中,其中1, 2 - M 的特征值,沒有排序 (x1, y1) - 特征向量,對 1 (x2, y2) - 特征向量,對 2 Corn

16、erMinEigenVal計(jì)算梯度矩陣的最小特征值,用于角點(diǎn)檢測void cvCornerMinEigenVal( const CvArr* image, CvArr* eigenval, int block_size, int aperture_size=3 );image 輸入圖像. eigenval 保存最小特征值的圖像. 與輸入圖像大小一致 block_size 鄰域大小 (見討論 cvCornerEigenValsAndVecs). aperture_size Sobel 算子的核尺寸(見 cvSobel). 當(dāng)輸入圖像是浮點(diǎn)數(shù)格式時(shí),該參數(shù)表示用來計(jì)算差分固定的浮點(diǎn)濾波器的個(gè)數(shù).

17、函數(shù) cvCornerMinEigenVal 與 cvCornerEigenValsAndVecs 類似,但是它僅僅計(jì)算和存儲(chǔ)每個(gè)象素點(diǎn)差分相關(guān)矩陣的最小特征值,即前一個(gè)函數(shù)的 min(1, 2)CornerHarris哈里斯(Harris)角點(diǎn)檢測void cvCornerHarris( const CvArr* image, CvArr* harris_responce, int block_size, int aperture_size=3, double k=0.04 );image 輸入圖像。 harris_responce 存儲(chǔ)哈里斯(Harris)檢測responces的圖像。與

18、輸入圖像等大。 block_size 鄰域大?。ㄒ婈P(guān)于cvCornerEigenValsAndVecs的討論)。 aperture_size 擴(kuò)展 Sobel 核的大小(見 cvSobel)。格式. 當(dāng)輸入圖像是浮點(diǎn)數(shù)格式時(shí),該參數(shù)表示用來計(jì)算差分固定的浮點(diǎn)濾波器的個(gè)數(shù)。 k harris 檢測器的自由參數(shù)。參見下面的公式。 函數(shù) cvCornerHarris 對輸入圖像進(jìn)行 Harris 邊界檢測。類似于 cvCornerMinEigenVal 和 cvCornerEigenValsAndVecs。對每個(gè)像素,在 block_size*block_size 大小的鄰域上,計(jì)算其2*2梯度共變

19、矩陣(或相關(guān)異變矩陣)M。然后,將 det(M) - k*trace(M)2 (這里2是平方) 保存到輸出圖像中。輸入圖像中的角點(diǎn)在輸出圖像中由局部最大值表示。FindCornerSubPix精確角點(diǎn)位置void cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners, int count, CvSize win, CvSize zero_zone, CvTermCriteria criteria );image 輸入圖像. corners 輸入角點(diǎn)的初始坐標(biāo),也存儲(chǔ)精確的輸出坐標(biāo) count 角點(diǎn)數(shù)目 win 搜索窗口的一半

20、尺寸。如果 win=(5,5) 那么使用 5*2+1 × 5*2+1 = 11 × 11 大小的搜索窗口 zero_zone 死區(qū)的一半尺寸,死區(qū)為不對搜索區(qū)的中央位置做求和運(yùn)算的區(qū)域。它是用來避免自相關(guān)矩陣出現(xiàn)的某些可能的奇異性。當(dāng)值為 (-1,-1) 表示沒有死區(qū)。 criteria 求角點(diǎn)的迭代過程的終止條件。即角點(diǎn)位置的確定,要么迭代數(shù)大于某個(gè)設(shè)定值,或者是精確度達(dá)到某個(gè)設(shè)定值。 criteria 可以是最大迭代數(shù)目,或者是設(shè)定的精確度,也可以是它們的組合。 函數(shù) cvFindCornerSubPix 通過迭代來發(fā)現(xiàn)具有子象素精度的角點(diǎn)位置,或如圖所示的放射鞍點(diǎn)(r

21、adial saddle points)。子象素級(jí)角點(diǎn)定位的實(shí)現(xiàn)是基于對向量正交性的觀測而實(shí)現(xiàn)的,即從中央點(diǎn)q到其鄰域點(diǎn)p 的向量和p點(diǎn)處的圖像梯度正交(服從圖像和測量噪聲)??紤]以下的表達(dá)式:i=DIpiT(q-pi)其中,DIpi表示在q的一個(gè)鄰域點(diǎn)pi處的圖像梯度,q的值通過最小化i得到。通過將i設(shè)為0,可以建立系統(tǒng)方程如下:sumi(DIpiDIpiT)q - sumi(DIpiDIpiTpi) = 0其中q的鄰域(搜索窗)中的梯度被累加。調(diào)用第一個(gè)梯度參數(shù)G和第二個(gè)梯度參數(shù)b,得到:q=G-1b該算法將搜索窗的中心設(shè)為新的中心q,然后迭代,直到找到低于某個(gè)閾值點(diǎn)的中心位置。GoodF

22、eaturesToTrack確定圖像的強(qiáng)角點(diǎn)void cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image, CvArr* temp_image, CvPoint2D32f* corners, int* corner_count, double quality_level, double min_distance, const CvArr* mask=NULL );image 輸入圖像,8-位或浮點(diǎn)32-比特,單通道 eig_image 臨時(shí)浮點(diǎn)32-位圖像,尺寸與輸入圖像一致 temp_image 另外一個(gè)臨時(shí)圖像,格式與尺寸

23、與 eig_image 一致 corners 輸出參數(shù),檢測到的角點(diǎn) corner_count 輸出參數(shù),檢測到的角點(diǎn)數(shù)目 quality_level 最大最小特征值的乘法因子。定義可接受圖像角點(diǎn)的最小質(zhì)量因子。 min_distance 限制因子。得到的角點(diǎn)的最小距離。使用 Euclidian 距離 mask ROI:感興趣區(qū)域。函數(shù)在ROI中計(jì)算角點(diǎn),如果 mask 為 NULL,則選擇整個(gè)圖像。 必須為單通道的灰度圖,大小與輸入圖像相同。mask對應(yīng)的點(diǎn)不為0,表示計(jì)算該點(diǎn)。 函數(shù) cvGoodFeaturesToTrack 在圖像中尋找具有大特征值的角點(diǎn)。該函數(shù),首先用cvCorner

24、MinEigenVal 計(jì)算輸入圖像的每一個(gè)象素點(diǎn)的最小特征值,并將結(jié)果存儲(chǔ)到變量 eig_image 中。然后進(jìn)行非最大值抑制(僅保留3x3鄰域中的局部最大值)。下一步將最小特征值小于 quality_levelmax(eig_image(x,y) 排除掉。最后,函數(shù)確保所有發(fā)現(xiàn)的角點(diǎn)之間具有足夠的距離,(最強(qiáng)的角點(diǎn)第一個(gè)保留,然后檢查新的角點(diǎn)與已有角點(diǎn)之間的距離大于 min_distance )。采樣、插值和幾何變換InitLineIterator初始化線段迭代器int cvInitLineIterator( const CvArr* image, CvPoint pt1, CvPoint

25、 pt2, CvLineIterator* line_iterator, int connectivity=8 );image 帶采線段的輸入圖像. pt1 線段起始點(diǎn) pt2 線段結(jié)束點(diǎn) line_iterator 指向線段迭代器狀態(tài)結(jié)構(gòu)的指針 connectivity 被掃描線段的連通數(shù),4 或 8. 函數(shù) cvInitLineIterator 初始化線段迭代器,并返回兩點(diǎn)之間的象素點(diǎn)數(shù)目。兩個(gè)點(diǎn)必須在圖像內(nèi)。當(dāng)?shù)鞒跏蓟?,連接兩點(diǎn)的光柵線上所有點(diǎn),都可以連續(xù)通過調(diào)用 CV_NEXT_LINE_POINT 來得到。線段上的點(diǎn)是使用 4連通或8連通利用 Bresenham 算法逐點(diǎn)計(jì)算的

26、。例子:使用線段迭代器計(jì)算彩色線上象素值的和CvScalar sum_line_pixels( IplImage* image, CvPoint pt1, CvPoint pt2 ) CvLineIterator iterator; int blue_sum = 0, green_sum = 0, red_sum = 0; int count = cvInitLineIterator( image, pt1, pt2, &iterator, 8 ); for( int i = 0; i < count; i+ ) blue_sum += iterator.ptr0; green_

27、sum += iterator.ptr1; red_sum += iterator.ptr2; CV_NEXT_LINE_POINT(iterator); /* print the pixel coordinates: demonstrates how to calculate the coordinates */ int offset, x, y; /* assume that ROI is not set, otherwise need to take it into account. */ offset = iterator.ptr - (uchar*)(image->imageD

28、ata); y = offset/image->widthStep; x = (offset - y*image->widthStep)/(3*sizeof(uchar) /* size of pixel */); printf("(%d,%d)n", x, y ); return cvScalar( blue_sum, green_sum, red_sum );SampleLine將圖像上某一光柵線上的像素?cái)?shù)據(jù)讀入緩沖區(qū)int cvSampleLine( const CvArr* image, CvPoint pt1, CvPoint pt2, void* b

29、uffer, int connectivity=8 );image 輸入圖像 pt1 光柵線段的起點(diǎn) pt2 光柵線段的終點(diǎn) buffer 存儲(chǔ)線段點(diǎn)的緩存區(qū),必須有足夠大小來存儲(chǔ)點(diǎn) max( |pt2.x-pt1.x|+1, |pt2.y-pt1.y|+1 ) :8連通情況下,或者 |pt2.x-pt1.x|+|pt2.y-pt1.y|+1 : 4連通情況下. connectivity 線段的連通方式, 4 or 8. 函數(shù) cvSampleLine 實(shí)現(xiàn)了線段迭代器的一個(gè)特殊應(yīng)用。它讀取由 pt1 和 pt2 兩點(diǎn)確定的線段上的所有圖像點(diǎn),包括終點(diǎn),并存儲(chǔ)到緩存中。GetRectSubPi

30、x從圖像中提取象素矩形,使用子象素精度void cvGetRectSubPix( const CvArr* src, CvArr* dst, CvPoint2D32f center );src 輸入圖像. dst 提取的矩形. center 提取的象素矩形的中心,浮點(diǎn)數(shù)坐標(biāo)。中心必須位于圖像內(nèi)部. 函數(shù) cvGetRectSubPix 從圖像 src 中提取矩形:dst(x, y) = src(x + center.x - (width(dst)-1)*0.5, y + center.y - (height(dst)-1)*0.5)其中非整數(shù)象素點(diǎn)坐標(biāo)采用雙線性插值提取。對多通道圖像,每個(gè)通道

31、獨(dú)立單獨(dú)完成提取。盡管函數(shù)要求矩形的中心一定要在輸入圖像之中,但是有可能出現(xiàn)矩形的一部分超出圖像邊界的情況,這時(shí),該函數(shù)復(fù)制邊界的模識(shí)(hunnish:即用于矩形相交的圖像邊界線段的象素來代替矩形超越部分的象素)。GetQuadrangleSubPix提取象素四邊形,使用子象素精度void cvGetQuadrangleSubPix( const CvArr* src, CvArr* dst, const CvMat* map_matrix );src 輸入圖像. dst 提取的四邊形. map_matrix 3 × 2 變換矩陣 A|b (見討論). 函數(shù) cvGetQuadran

32、gleSubPix 以子象素精度從圖像 src 中提取四邊形,使用子象素精度,并且將結(jié)果存儲(chǔ)于 dst ,計(jì)算公式是:dst(x + width(dst) / 2,y + height(dst) / 2) = src(A11x + A12y + b1,A21x + A22y + b2)其中 A和 b 均來自映射矩陣(譯者注:A, b為幾何形變參數(shù)) ,映射矩陣為:其中在非整數(shù)坐標(biāo)   的象素點(diǎn)值通過雙線性變換得到。當(dāng)函數(shù)需要圖像邊界外的像素點(diǎn)時(shí),使用重復(fù)邊界模式(replication border mode)恢復(fù)出所需的值。多通道圖像的每一個(gè)通道都單獨(dú)計(jì)算。例子:使用 cvGetQ

33、uadrangleSubPix 進(jìn)行圖像旋轉(zhuǎn)#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(argv1, -1)!=0) IplImage* dst = cvCloneImage(

34、 src ); int delta = 1; int angle = 0; cvNamedWindow( "src", 1 ); cvShowImage( "src", src ); for(;) float m6; 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; m0 = (float)(factor*cos(-angle*2*CV_PI/

35、180.); m1 = (float)(factor*sin(-angle*2*CV_PI/180.); m2 = w*0.5f; m3 = -m1; m4 = m0; m5 = 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

36、 0;Resize圖像大小變換void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR );src 輸入圖像. dst 輸出圖像. interpolation 插值方法: · CV_INTER_NN - 最近鄰插值, · CV_INTER_LINEAR - 雙線性插值 (缺省使用) · CV_INTER_AREA - 使用象素關(guān)系重采樣。當(dāng)圖像縮小時(shí)候,該方法可以避免波紋出現(xiàn)。當(dāng)圖像放大時(shí),類似于 CV_INTER_NN 方法. · CV_INTER_CU

37、BIC - 立方插值. 函數(shù) cvResize 將圖像 src 改變尺寸得到與 dst 同樣大小。若設(shè)定 ROI,函數(shù)將按常規(guī)支持 ROI.WarpAffine對圖像做仿射變換void cvWarpAffine( const CvArr* src, CvArr* dst, const CvMat* map_matrix, int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, CvScalar fillval=cvScalarAll(0) );src 輸入圖像. dst 輸出圖像. map_matrix 2×3 變換矩陣 flags 插值方法

38、和以下開關(guān)選項(xiàng)的組合: · CV_WARP_FILL_OUTLIERS - 填充所有輸出圖像的象素。如果部分象素落在輸入圖像的邊界外,那么它們的值設(shè)定為 fillval. · CV_WARP_INVERSE_MAP - 指定 map_matrix 是輸出圖像到輸入圖像的反變換,因此可以直接用來做象素插值。否則, 函數(shù)從 map_matrix 得到反變換。 fillval 用來填充邊界外面的值 函數(shù) cvWarpAffine 利用下面指定的矩陣變換輸入圖像:· 如果沒有指定 CV_WARP_INVERSE_MAP ,· 否則,函數(shù)與 cvGetQuadra

39、ngleSubPix 類似,但是不完全相同。 cvWarpAffine 要求輸入和輸出圖像具有同樣的數(shù)據(jù)類型,有更大的資源開銷(因此對小圖像不太合適)而且輸出圖像的部分可以保留不變。而 cvGetQuadrangleSubPix 可以精確地從8位圖像中提取四邊形到浮點(diǎn)數(shù)緩存區(qū)中,具有比較小的系統(tǒng)開銷,而且總是全部改變輸出圖像的內(nèi)容。要變換稀疏矩陣,使用 cxcore 中的函數(shù) cvTransform 。GetAffineTransform由三對點(diǎn)計(jì)算仿射變換CvMat* cvGetAffineTransform( const CvPoint2D32f* src, const CvPoint2D

40、32f* dst, CvMat* map_matrix );src 輸入圖像的三角形頂點(diǎn)坐標(biāo)。 dst 輸出圖像的相應(yīng)的三角形頂點(diǎn)坐標(biāo)。 map_matrix 指向2×3輸出矩陣的指針。 函數(shù)cvGetAffineTransform計(jì)算滿足以下關(guān)系的仿射變換矩陣:這里,dst(i) = (x'i,y'i),src(i) = (xi,yi),i = 0.2. 2DRotationMatrix計(jì)算二維旋轉(zhuǎn)的仿射變換矩陣CvMat* cv2DRotationMatrix( CvPoint2D32f center, double angle, double scale, Cv

41、Mat* map_matrix );center 輸入圖像的旋轉(zhuǎn)中心坐標(biāo) angle 旋轉(zhuǎn)角度(度)。正值表示逆時(shí)針旋轉(zhuǎn)(坐標(biāo)原點(diǎn)假設(shè)在左上角). scale 各項(xiàng)同性的尺度因子 map_matrix 輸出 2×3 矩陣的指針 函數(shù) cv2DRotationMatrix 計(jì)算矩陣: | (1-)*center.x - *center.y - | *center.x + (1-)*center.y where =scale*cos(angle), =scale*sin(angle)該變換并不改變原始旋轉(zhuǎn)中心點(diǎn)的坐標(biāo),如果這不是操作目的,則可以通過調(diào)整平移量改變其坐標(biāo)(譯者注:通過簡單的

42、推導(dǎo)可知,仿射變換的實(shí)現(xiàn)是首先將旋轉(zhuǎn)中心置為坐標(biāo)原點(diǎn),再進(jìn)行旋轉(zhuǎn)和尺度變換,最后重新將坐標(biāo)原點(diǎn)設(shè)定為輸入圖像的左上角,這里的平移量是center.x, center.y).WarpPerspective對圖像進(jìn)行透視變換void cvWarpPerspective( const CvArr* src, CvArr* dst, const CvMat* map_matrix, int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, CvScalar fillval=cvScalarAll(0) );src 輸入圖像. dst 輸出圖像. map_matr

43、ix 3×3 變換矩陣 flags 插值方法和以下開關(guān)選項(xiàng)的組合: · CV_WARP_FILL_OUTLIERS - 填充所有縮小圖像的象素。如果部分象素落在輸入圖像的邊界外,那么它們的值設(shè)定為 fillval. · CV_WARP_INVERSE_MAP - 指定 matrix 是輸出圖像到輸入圖像的反變換,因此可以直接用來做象素插值。否則, 函數(shù)從 map_matrix 得到反變換。 fillval 用來填充邊界外面的值 函數(shù) cvWarpPerspective 利用下面指定矩陣變換輸入圖像:· 如果沒有指定 CV_WARP_INVERSE_MAP

44、 ,, · 否則, 要變換稀疏矩陣,使用 cxcore 中的函數(shù) cvTransform 。WarpPerspectiveQMatrix用4個(gè)對應(yīng)點(diǎn)計(jì)算透視變換矩陣CvMat* cvWarpPerspectiveQMatrix( const CvPoint2D32f* src, const CvPoint2D32f* dst, CvMat* map_matrix );src 輸入圖像的四邊形的4個(gè)點(diǎn)坐標(biāo) dst 輸出圖像的對應(yīng)四邊形的4個(gè)點(diǎn)坐標(biāo) map_matrix 輸出的 3×3 矩陣 函數(shù) cvWarpPerspectiveQMatrix 計(jì)算透視變換矩陣,使得:(ti

45、x'i,tiy'i,ti)T=matrix(xi,yi,1)T其中 dst(i)=(x'i,y'i), src(i)=(xi,yi), i=0.3.GetPerspectiveTransform由四對點(diǎn)計(jì)算透射變換CvMat* cvGetPerspectiveTransform( const CvPoint2D32f* src, const CvPoint2D32f* dst, CvMat* map_matrix );#define cvWarpPerspectiveQMatrix cvGetPerspectiveTransformsrc 輸入圖像的四邊形頂點(diǎn)坐

46、標(biāo)。 dst 輸出圖像的相應(yīng)的四邊形頂點(diǎn)坐標(biāo)。 map_matrix 指向3×3輸出矩陣的指針。 函數(shù)cvGetPerspectiveTransform計(jì)算滿足以下關(guān)系的透射變換矩陣: 這里,dst(i) = (x'i,y'i),src(i) = (xi,yi),i = 0.3. Remap對圖像進(jìn)行普通幾何變換void cvRemap( const CvArr* src, CvArr* dst, const CvArr* mapx, const CvArr* mapy, int flags=CV_INTER_LINEAR+CV_WARP_FILL

47、_OUTLIERS, CvScalar fillval=cvScalarAll(0) );src 輸入圖像. dst 輸出圖像. mapx x坐標(biāo)的映射 (32fC1 image). mapy y坐標(biāo)的映射 (32fC1 image). flags 插值方法和以下開關(guān)選項(xiàng)的組合: · CV_WARP_FILL_OUTLIERS - 填充邊界外的像素. 如果輸出圖像的部分象素落在變換后的邊界外,那么它們的值設(shè)定為 fillval。 fillval 用來填充邊界外面的值. 函數(shù) cvRemap 利用下面指定的矩陣變換輸入圖像:dst(x,y)<-src(mapx(x,y),mapy

48、(x,y)與其它幾何變換類似,可以使用一些插值方法(由用戶指定,譯者注:同cvResize)來計(jì)算非整數(shù)坐標(biāo)的像素值。LogPolar把圖像映射到極指數(shù)空間void cvLogPolar( const CvArr* src, CvArr* dst, CvPoint2D32f center, double M, int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS );src 輸入圖像。 dst 輸出圖像。 center 變換的中心,輸出圖像在這里最精確。 M 幅度的尺度參數(shù),見下面公式。 flags 插值方法和以下選擇標(biāo)志的結(jié)合 · CV_W

49、ARP_FILL_OUTLIERS -填充輸出圖像所有像素,如果這些點(diǎn)有和外點(diǎn)對應(yīng)的,則置零。 · CV_WARP_INVERSE_MAP - 表示矩陣由輸出圖像到輸入圖像的逆變換,并且因此可以直接用于像素插值。否則,函數(shù)從map_matrix中尋找逆變換。 fillval 用于填充外點(diǎn)的值。 函數(shù)cvLogPolar用以下變換變換輸入圖像:正變換 (CV_WARP_INVERSE_MAP 未置位):dst(phi,rho)<-src(x,y)逆變換 (CV_WARP_INVERSE_MAP 置位):dst(x,y)<-src(phi,rho),這里,rho=M*log(

50、sqrt(x2+y2)phi=atan(y/x)此函數(shù)模仿人類視網(wǎng)膜中央凹視力,并且對于目標(biāo)跟蹤等可用于快速尺度和旋轉(zhuǎn)變換不變模板匹配。Example. Log-polar transformation.#include <cv.h>#include <highgui.h>int main(int argc, char* argv) IplImage* src; if( argc = 2 && (src=cvLoadImage(argv1,1) != 0 ) IplImage* dst = cvCreateImage( cvSize(256,2

51、56), 8, 3 ); IplImage* src2 = cvCreateImage( cvGetSize(src), 8, 3 ); cvLogPolar( src, dst, cvPoint2D32f(src->width/2,src->height/2), 40, CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS ); cvLogPolar( dst, src2, cvPoint2D32f(src->width/2,src->height/2), 40, CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS+CV_

52、WARP_INVERSE_MAP ); cvNamedWindow( "log-polar", 1 ); cvShowImage( "log-polar", dst ); cvNamedWindow( "inverse log-polar", 1 ); cvShowImage( "inverse log-polar", src2 ); cvWaitKey(); return 0;And this is what the program displays when opencv/samples/c/fruits.jp

53、g is passed to it形態(tài)學(xué)操作CreateStructuringElementEx創(chuàng)建結(jié)構(gòu)元素IplConvKernel* cvCreateStructuringElementEx( int cols, int rows, int anchor_x, int anchor_y, int shape, int* values=NULL );cols 結(jié)構(gòu)元素的列數(shù)目 rows 結(jié)構(gòu)元素的行數(shù)目 anchor_x 錨點(diǎn)的相對水平偏移量 anchor_y 錨點(diǎn)的相對垂直偏移量 shape 結(jié)構(gòu)元素的形狀,可以是下列值: · CV_SHAPE_RECT, 長方形元素; 

54、3; CV_SHAPE_CROSS, 交錯(cuò)元素 a cross-shaped element; · CV_SHAPE_ELLIPSE, 橢圓元素; · CV_SHAPE_CUSTOM, 用戶自定義元素。這種情況下參數(shù) values 定義了 mask,即象素的那個(gè)鄰域必須考慮。 values 指向結(jié)構(gòu)元素的指針,它是一個(gè)平面數(shù)組,表示對元素矩陣逐行掃描。(非零點(diǎn)表示該點(diǎn)屬于結(jié)構(gòu)元)。如果指針為空,則表示平面數(shù)組中的所有元素都是非零的,即結(jié)構(gòu)元是一個(gè)長方形(該參數(shù)僅僅當(dāng)shape參數(shù)是 CV_SHAPE_CUSTOM 時(shí)才予以考慮)。 函數(shù) cv CreateStructuringElementEx 分配和填充結(jié)構(gòu) IplConvKernel, 它可作為形態(tài)操作中的結(jié)構(gòu)元素。ReleaseStr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論