仿射變換
opencv提供了函式cv2.getAffineTransform()來創建一個2*3的矩陣,該矩陣傳遞給cv2.warpAffine(),該函式語法格式為:
retval = cv.getAffineTransform(src, dst) ''' src:輸入影像的三個點坐標 dst:輸出影像的三個點坐標 三個點分別對應左上角、右上角、左下角 '''
查看如下放射變換實體:
import numpy as np import cv2 as cv img = cv.imread(r'Lena.png', 1) rows, cols, channels = img.shape p1 = np.float32([[0,0], [cols-1,0], [0,rows-1]]) p2 = np.float32([[0,rows*0.3], [cols*0.8,rows*0.2], [cols*0.15,rows*0.7]]) M = cv.getAffineTransform(p1, p2) dst = cv.warpAffine(img, M, (cols,rows)) cv.imshow('original', img) cv.imshow('result', dst) cv.waitKey(0) cv.destroyAllWindows()
效果圖:


透視變換
上述仿射變換可以將矩形映射成任意平行四邊形,各邊仍保持平行;而透視變換可以將矩形映射為任意四邊形,直線仍保持直線,
由于不再是平行四邊形,需提供四個頂點,
透視變換通過函式cv2.warpPerspective()實作,語法為:
dst = cv.warpPerspective(src, M, dsize[, flags[, borderMode[, borderValue]]]) ''' dst:透視后的輸出影像,dsize決定輸出影像大小 src:輸入影像 M:3*3變換矩陣 flags:插值方法,默認為INTER_LINEAR borderMode:邊型別,默認為BORDER_CONSTANT borderValue:邊界值,默認為0 '''
透視變換通過函式cv2.getPerspectiveTransform()來生成轉換矩陣,需輸入輸入影像和輸出影像的四個頂點的坐標,
import numpy as np import cv2 as cv img = cv.imread(r'Lena.png', 1) rows, cols, channels = img.shape p1 = np.float32([[0,0], [cols-1,0], [0,rows-1], [rows-1,cols-1]]) p2 = np.float32([[0,rows*0.3], [cols*0.8,rows*0.2], [cols*0.15,rows*0.7], [cols*0.8,rows*0.8]]) M = cv.getPerspectiveTransform(p1,p2) dst = cv.warpPerspective(img, M, (cols, rows)) cv.imshow('original', img) cv.imshow('result', dst) cv.waitKey(0) cv.destroyAllWindows()
效果圖:


轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/102183.html
標籤:Python
上一篇:Python中的錯誤和例外
