[Ch 05]ジオメトリ変換-漁師変換とパース変換
12626 ワード
漁師変換vs透視変換
パース変換により、より多くの角度に変換できます.
漁師変換は自動的に最後の点を決定し、透視変換は手動で最後の点を決定しなければならない.
Apin変換マトリックスを求めます
cv2.getAffineTransform(src, dst) -> retval
np.array([[x1, y1], [x2, y2], [x3, y3]], np.float32)
ピボット変換マトリクスを求める
cv2.getPerspectiveTransform(src, dst, solveMethod=None) -> retval
np.array([[x1, y1], [x2, y2], [x3, y3], [x4, y4]], np.float32)
画像の漁師変換関数
cv2.warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None) -> dst
画像のピボット変換関数
cv2.warpPerspective(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None) -> dst
ピボット変換の例(歪んだ名刺を展開)
src = cv2.imread('namecard.jpg')
w, h = 720, 400
srcQuad = np.array([[325, 307], [760, 369], [718, 611], [231, 515]], np.float32)
dstQuad = np.array([[0, 0], [w-1, 0], [w-1, h-1], [0, h-1]], np.float32)
pers = cv2.getPerspectiveTransform(srcQuad, dstQuad)
dst = cv2.warpPerspective(src, pers, (w, h))
適用例:マウスの配置
src = cv2.imread('namecard.jpg')
clicked_points = []
def on_mouse(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
clicked_points.append([x, y])
w, h = 720, 400
srcQuad = np.array([clicked_points[0], clicked_points[1], clicked_points[2], clicked_points[3]], np.float32)
dstQuad = np.array([[0, 0], [w-1, 0], [w-1, h-1], [0, h-1]], np.float32)
pers = cv2.getPerspectiveTransform(srcQuad, dstQuad)
dst = cv2.warpPerspective(src, pers, (w, h))
Reference
この問題について([Ch 05]ジオメトリ変換-漁師変換とパース変換), 我々は、より多くの情報をここで見つけました https://velog.io/@redorangeyellowy/ch05-기하학적-변환-어파인-변환과-투시-변환テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol