什么是透視?
透視是一種幾何學(xué)概念,用于描述在三維空間中觀察物體時,由于視角的不同而產(chǎn)生的變形效果。在現(xiàn)實世界中,當(dāng)我們從不同的角度或位置觀察物體時,它們會呈現(xiàn)出不同的形狀和大小。這種現(xiàn)象被稱為透視效果。
透視效果主要由以下幾個因素造成:
遠(yuǎn)近關(guān)系:在視野范圍內(nèi),離我們更遠(yuǎn)的物體看起來較小,而離我們更近的物體看起來較大。這是因為我們在觀察時,遠(yuǎn)處的物體在視平面上的投影較小。
平行線收斂:在透視效果下,遠(yuǎn)離觀察者的平行線在視覺上會似乎收斂到一個點,被稱為消失點。這使得在遠(yuǎn)處的物體線條會看起來更加趨向于一點。
視角變化:觀察物體的視角改變,物體的形狀和大小也會發(fā)生變化。例如,當(dāng)我們傾斜或移動頭部時,看到的物體會有不同的形態(tài)。
透視效果在繪畫、攝影、計算機(jī)圖形學(xué)等領(lǐng)域都起著重要的作用。在繪畫中,藝術(shù)家通常使用透視來創(chuàng)造真實感和深度感。在攝影中,攝影師可以利用透視來拍攝令人驚嘆的遠(yuǎn)景和近景照片。在計算機(jī)圖形學(xué)中,透視是渲染真實感圖像的重要技術(shù)之一。
在圖像處理中,透視變換是一種將圖像投影到一個新的視角或平面的方法,以實現(xiàn)校正透視畸變、改變圖像視角等目的。通過透視變換,可以將圖像中的內(nèi)容按照一定的規(guī)則進(jìn)行調(diào)整,從而達(dá)到所需的效果。
opencv 透視的應(yīng)用場景
OpenCV中透視變換的應(yīng)用場景非常廣泛,它可以在許多不同的領(lǐng)域和任務(wù)中發(fā)揮重要作用。以下是一些使用OpenCV透視變換的常見應(yīng)用場景:
- 圖像校正與糾正:
透視變換可以用于校正圖像中的透視畸變,例如攝像頭拍攝的傾斜建筑物或文檔圖像。通過找到正確的透視變換矩陣,可以將圖像變換為在平面上正常顯示的形式。 - 圖像拼接與全景圖像:
在全景圖像拼接中,透視變換用于將多個圖像對齊并拼接成一個更大的全景圖像。通過透視變換,可以校正相機(jī)的視角,以便拼接后的圖像具有連貫的視覺效果。 - 車道線檢測與車道保持:
在自動駕駛或駕駛輔助系統(tǒng)中,透視變換可用于檢測車道線并保持車輛在車道中心行駛。通過將圖像轉(zhuǎn)換為鳥瞰視角,車道線在圖像中將呈現(xiàn)為直線,便于車道線檢測算法的實現(xiàn)。 - 物體檢測與識別:
在計算機(jī)視覺中,透視變換可以用于改變圖像的視角,從而便于對物體進(jìn)行檢測和識別。例如,通過將圖像轉(zhuǎn)換為俯視視角,可以更容易地檢測和跟蹤行人或車輛。 - 視頻穩(wěn)定與追蹤:
在視頻穩(wěn)定和目標(biāo)追蹤中,透視變換可用于穩(wěn)定視頻或?qū)⒛繕?biāo)區(qū)域轉(zhuǎn)換到固定視角,以便進(jìn)行更穩(wěn)健的跟蹤。 - 增強(qiáng)現(xiàn)實 (AR) 應(yīng)用:
在AR應(yīng)用中,透視變換可以用于將虛擬對象與真實世界中的物體進(jìn)行融合,從而實現(xiàn)更真實的增強(qiáng)現(xiàn)實體驗。 - 文檔掃描與識別:
在文檔掃描與識別應(yīng)用中,透視變換可用于校正文檔圖像中的透視畸變,從而確保文本和圖像的水平和垂直對齊。
這些只是OpenCV透視變換的一些常見應(yīng)用場景,實際上,透視變換在計算機(jī)視覺和圖像處理中有著廣泛的應(yīng)用,幫助我們解決各種復(fù)雜的視覺任務(wù)。
透視變換通過函數(shù) cv2.warpPerspective()
實現(xiàn),該函數(shù)的語法是:
dst = cv2.warpPerspective( src, M, dsize[, flags[, borderMode[, borderValue]]] )
式中:
? dst 代表透視處理后的輸出圖像,該圖像和原始圖像具有相同的類型。dsize 決定輸出圖
像的實際大小。
? src 代表要透視的圖像。
? M 代表一個 3×3 的變換矩陣。
? dsize 代表輸出圖像的尺寸大小。
? flags 代表插值方法,默認(rèn)為 INTER_LINEAR。當(dāng)該值為 WARP_INVERSE_MAP 時,
意味著 M 是逆變換類型,能實現(xiàn)從目標(biāo)圖像 dst 到原始圖像 src 的逆變換。具體可選值
參見表 5-1。
? borderMode 代表邊類型, 默認(rèn)為 BORDER_CONSTANT 。 當(dāng) 該值為 BORDER_
TRANSPARENT 時,意味著目標(biāo)圖像內(nèi)的值不做改變,這些值對應(yīng)原始圖像內(nèi)的異常值。
borderValue 代表邊界值,默認(rèn)是 0。
與仿射變換一樣,同樣可以使用一個函數(shù)來生成函數(shù) cv2.warpPerspective()所使用的轉(zhuǎn)換矩陣。
該函數(shù)是 cv2.getPerspectiveTransform()
,其語法格式為:
retval = cv2.getPerspectiveTransform( src, dst )
式中:
? src 代表輸入圖像的四個頂點的坐標(biāo)。
? dst 代表輸出圖像的四個頂點的坐標(biāo)。
需要注意的是, src 參數(shù)和 dst 參數(shù)是包含四個點的數(shù)組,與仿射變換函數(shù) cv2.getAffineTransform()
中的三個點是不同的。實際使用中,我們可以根據(jù)需要控制 src 中的四
個點映射到 dst 中的四個點。
實驗:完成圖像透視
import cv2
import numpy as np
img=cv2.imread('demo.bmp')
rows,cols=img.shape[:2]
print(rows,cols)
pts1 = np.float32([[150,50],[400,50],[60,450],[310,450]])
pts2 = np.float32([[50,50],[rows-50,50],[50,cols-50],[rows-50,cols-50]])
M=cv2.getPerspectiveTransform(pts1,pts2)
dst=cv2.warpPerspective(img,M,(cols,rows))
cv2.imshow("img",img)
cv2.imshow("dst",dst)
cv2.waitKey()
cv2.destroyAllWindows()
指定原始圖像中平行四邊形的四個頂點 pts1,指定目標(biāo)圖像中矩形的四個頂點
pts2,使用 M=cv2.getPerspectiveTransform(pts1,pts2)生成轉(zhuǎn)換矩陣 M。接下來,使用語句
dst=cv2.warpPerspective(img,M,(cols,rows))完成從平行四邊形到矩形的轉(zhuǎn)換。
運(yùn)行效果:
實驗原圖:文章來源:http://www.zghlxwxcb.cn/news/detail-609109.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-609109.html
到了這里,關(guān)于opencv-25 圖像幾何變換04- 透視 cv2.warpPerspective()的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!