日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

OpenCV-Python 圖像的幾何變換 | 十四

 taotao_2016 2019-12-14

目標(biāo)

  • 學(xué)習(xí)將不同的幾何變換應(yīng)用到圖像上,如平移、旋轉(zhuǎn)、仿射變換等。
  • 你會(huì)看到這些函數(shù): cv.getPerspectiveTransform

變換

OpenCV提供了兩個(gè)轉(zhuǎn)換函數(shù)cv.warpAffinecv.warpPerspective,您可以使用它們進(jìn)行各種轉(zhuǎn)換。cv.warpAffine采用2x3轉(zhuǎn)換矩陣,而cv.warpPerspective采用3x3轉(zhuǎn)換矩陣作為輸入。

縮放

縮放只是調(diào)整圖像的大小。為此,OpenCV帶有一個(gè)函數(shù)cv.resize()。圖像的大小可以手動(dòng)指定,也可以指定縮放比例。也可使用不同的插值方法。首選的插值方法是cv.INTER_AREA用于縮小,cv.INTER_CUBIC(慢)和cv.INTER_LINEAR用于縮放。默認(rèn)情況下,出于所有調(diào)整大小的目的,使用的插值方法為cv.INTER_LINEAR。您可以使用以下方法調(diào)整輸入圖像的大小:

import numpy as npimport cv2 as cvimg = cv.imread('messi5.jpg')res = cv.resize(img,None,fx=2, fy=2, interpolation = cv.INTER_CUBIC)#或者h(yuǎn)eight, width = img.shape[:2]res = cv.resize(img,(2*width, 2*height), interpolation = cv.INTER_CUBIC)

平移

平移是物體位置的移動(dòng)。如果您知道在(x,y)方向上的位移,則將其設(shè)為(t_x,$ty$),你可以創(chuàng)建轉(zhuǎn)換矩陣M,如下所示:

OpenCV-Python 圖像的幾何變換 | 十四

您可以將其放入np.float32類(lèi)型的Numpy數(shù)組中,并將其傳遞給cv.warpAffine函數(shù)。參見(jiàn)下面偏移為(100, 50)的示例:

import numpy as npimport cv2 as cvimg = cv.imread('messi5.jpg',0)rows,cols = img.shapeM = np.float32([[1,0,100],[0,1,50]])dst = cv.warpAffine(img,M,(cols,rows))cv.imshow('img',dst)cv.waitKey(0)cv.destroyAllWindows()

注意

cv.warpAffine函數(shù)的第三個(gè)參數(shù)是輸出圖像的大小,其形式應(yīng)為(width,height)。記住width =列數(shù),height =行數(shù)。

你將看到下面的結(jié)果:

OpenCV-Python 圖像的幾何變換 | 十四

旋轉(zhuǎn)

圖像旋轉(zhuǎn)角度為$θ$是通過(guò)以下形式的變換矩陣實(shí)現(xiàn)的:

OpenCV-Python 圖像的幾何變換 | 十四

但是OpenCV提供了可縮放的旋轉(zhuǎn)以及可調(diào)整的旋轉(zhuǎn)中心,因此您可以在自己喜歡的任何位置旋轉(zhuǎn)。修改后的變換矩陣為

OpenCV-Python 圖像的幾何變換 | 十四

其中:

OpenCV-Python 圖像的幾何變換 | 十四

為了找到此轉(zhuǎn)換矩陣,OpenCV提供了一個(gè)函數(shù)cv.getRotationMatrix2D。請(qǐng)檢查以下示例,該示例將圖像相對(duì)于中心旋轉(zhuǎn)90度而沒(méi)有任何縮放比例。

img = cv.imread('messi5.jpg',0)rows,cols = img.shape# cols-1 和 rows-1 是坐標(biāo)限制M = cv.getRotationMatrix2D(((cols-1)/2.0,(rows-1)/2.0),90,1)dst = cv.warpAffine(img,M,(cols,rows))

查看結(jié)果:

OpenCV-Python 圖像的幾何變換 | 十四

仿射變換

在仿射變換中,原始圖像中的所有平行線(xiàn)在輸出圖像中仍將平行。為了找到變換矩陣,我們需要輸入圖像中的三個(gè)點(diǎn)及其在輸出圖像中的對(duì)應(yīng)位置。然后cv.getAffineTransform將創(chuàng)建一個(gè)2x3矩陣,該矩陣將傳遞給cv.warpAffine

查看以下示例,并查看我選擇的點(diǎn)(以綠色標(biāo)記):

img = cv.imread('drawing.png')rows,cols,ch = img.shapepts1 = np.float32([[50,50],[200,50],[50,200]])pts2 = np.float32([[10,100],[200,50],[100,250]])M = cv.getAffineTransform(pts1,pts2)dst = cv.warpAffine(img,M,(cols,rows))plt.subplot(121),plt.imshow(img),plt.title('Input')plt.subplot(122),plt.imshow(dst),plt.title('Output')

查看結(jié)果:

OpenCV-Python 圖像的幾何變換 | 十四

透視變換

對(duì)于透視變換,您需要3x3變換矩陣。即使在轉(zhuǎn)換后,直線(xiàn)也將保持直線(xiàn)。要找到此變換矩陣,您需要在輸入圖像上有4個(gè)點(diǎn),在輸出圖像上需要相應(yīng)的點(diǎn)。在這四個(gè)點(diǎn)中,其中三個(gè)不應(yīng)共線(xiàn)。然后可以通過(guò)函數(shù)cv.getPerspectiveTransform找到變換矩陣。然后將cv.warpPerspective應(yīng)用于此3x3轉(zhuǎn)換矩陣。

請(qǐng)參見(jiàn)下面的代碼:

img = cv.imread('sudoku.png')rows,cols,ch = img.shapepts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])M = cv.getPerspectiveTransform(pts1,pts2)dst = cv.warpPerspective(img,M,(300,300))plt.subplot(121),plt.imshow(img),plt.title('Input')plt.subplot(122),plt.imshow(dst),plt.title('Output')plt.show()

結(jié)果:

OpenCV-Python 圖像的幾何變換 | 十四

其他資源
  1. 'Computer Vision: Algorithms and Applications', Richard Szeliski

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多