国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

opencv python 圖像縮放/圖像平移/圖像旋轉(zhuǎn)/仿射變換/透視變換

dreambei / 1985人閱讀

摘要:為了找到變換矩陣,我們需要輸入圖像中的三個(gè)點(diǎn)及其在輸出圖像中的相應(yīng)位置。代碼透視變換對(duì)于透視變換,需要一個(gè)變換矩陣。

Geometric Transformations of Images

1圖像轉(zhuǎn)換

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

2圖像縮放

縮放只是調(diào)整圖像大小.為此,OpenCV附帶了一個(gè)函數(shù)cv.resize().
cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

對(duì)shrinking,優(yōu)選的interpolation方法:cv2.INTER_AREA該方法可以避免波紋的出現(xiàn)

對(duì)zooming,優(yōu)選的interpolation方法:cv2.INTER_CUBICcv2.INTER_LINEAR(默認(rèn))

方法一

import numpy as np
import cv2

img = cv2.imread("messi5.jpg")

res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_CUBIC)

方法二

import numpy as np
import cv2

height, width = img.shape[:2]
res = cv2.resize(img,(2*width, 2*height), interpolation = cv2.INTER_CUBIC)
3圖像平移

平移是對(duì)象位置的轉(zhuǎn)換。 如果你知道(x,y)方向的偏移,讓它為(tx,ty),你可以創(chuàng)建變換矩陣M,如下所示:

$$ M= left[ egin{matrix} 1 & 0 & tx 0 & 1 & ty end{matrix} ight] $$

可以將其設(shè)置為np.float32類(lèi)型的Numpy數(shù)組,并將其傳遞給cv.warpAffine()函數(shù).

應(yīng)用

按(100,50)平移
代碼

import cv2
import numpy as np

img = cv2.imread("img.jpg",0)
rows,cols = img.shape

M = np.float32([[1,0,100],[0,1,50]])
dst = cv2.warpAffine(img,M,(cols,rows))

cv2.imshow("img",img)
cv2.imshow("dst",dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

4圖像旋轉(zhuǎn)

通過(guò)變換矩陣實(shí)現(xiàn)圖像旋轉(zhuǎn)角度θ:

$$ M= left[ egin{matrix} cosθ & -sinθ sinθ & cosθ end{matrix} ight] $$

OpenCV提供可調(diào)旋轉(zhuǎn),旋轉(zhuǎn)中心可調(diào),因此可以在任何的位置旋轉(zhuǎn).修正的變換矩陣由下式給出:

$$ left[ egin{matrix} alpha & eta & (1-alpha) cdot center.x - etacdot center.y -eta & alpha & etacdot center.x + (1-alpha) cdot center.y end{matrix} ight] $$

$ alpha = scale cdot cosθ $
$ eta = scale cdot sinθ $

為了找到這個(gè)轉(zhuǎn)換矩陣,OpenCV提供了一個(gè)函數(shù)cv2.getRotationMatrix2D.

應(yīng)用

將圖像相對(duì)于中心旋轉(zhuǎn)90度而不進(jìn)行任何縮放
代碼

import cv2
import numpy as np

img = cv2.imread("img.jpg",0)
rows,cols = img.shape

# cols-1 and rows-1 are the coordinate limits.
M = cv2.getRotationMatrix2D(((cols-1)/2.0,(rows-1)/2.0),90,1)
dst = cv2.warpAffine(img,M,(cols,rows))


cv2.imshow("img",img)
cv2.imshow("dst",dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

5仿射變換

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

import cv2
import numpy as np
import matplotlib.pylab  as plt

img = cv2.imread("img5.jpg")
rows,cols,ch = img.shape

pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[10,100],[200,50],[100,250]])

M = cv2.getAffineTransform(pts1,pts2)

dst = cv2.warpAffine(img,M,(cols,rows))

plt.subplot(121),plt.imshow(img),plt.title("Input")
plt.subplot(122),plt.imshow(dst),plt.title("Output")
plt.show()

5透視變換

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

代碼

import cv2
import numpy as np
import matplotlib.pylab  as plt

img = cv2.imread("img6.jpg")
rows,cols,ch = img.shape

pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])

M = cv2.getPerspectiveTransform(pts1,pts2)

dst = cv2.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()

NOTE
仿射變換和透視變換更直觀的叫法可以叫做“平面變換”和“空間變換”或者“二維坐標(biāo)變換”和“三維坐標(biāo)變換”.
從另一個(gè)角度也能說(shuō)明三維變換和二維變換的意思,仿射變換的方程組有6個(gè)未知數(shù),所以要求解就需要找到3組映射點(diǎn),三個(gè)點(diǎn)剛好確定一個(gè)平面.透視變換的方程組有8個(gè)未知數(shù),所以要求解就需要找到4組映射點(diǎn),四個(gè)點(diǎn)就剛好確定了一個(gè)三維空間.

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/41991.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<