前提・実現したいこと
Pythonでクリックした4つの座標を元に射影変換を行うプログラムを作りました。クリックした4点の座標を結んだ部分だけを切り抜いて結果表示させたいのですが、画像全体が結果として表示されてしまいます。どこを直せばよいのか皆目見当がつかないので教えていただきたいです。よろしくお願いいたします。
該当のソースコード
# -*- coding: utf-8 -*- """ """ import cv2 import numpy as np """ select_point関数(変換元画像の座標選択) """ def select_point(event, x, y, flags, param): if event == cv2.EVENT_FLAG_LBUTTON: cv2.circle(img, (x,y), 3, (255,0,0), -1) points.append(x) points.append(y) print(points) """ グローバル変数など """ img = cv2.imread('image10.jpg') rows, cols, ch = img.shape points = [] cv2.namedWindow('input') cv2.setMouseCallback('input', select_point) """ マウス操作(4点を選択) """ while(1): cv2.imshow('input',img) if cv2.waitKey(1) & 0xFF == 27: break """ ホモグラフィ変換 """ pts1 = np.float32([[points[0],points[1]],[points[2],points[3]],[points[4],points[5]],[points[6],points[7]]]) pts2 = np.float32([[0,38],[146,38],[146,238],[0,238]]) # 変換行列の作成 M = cv2.getPerspectiveTransform(pts1, pts2) # 画像の変換 dst = cv2.warpPerspective(img, M, (500, 706)) # 変換結果の表示 cv2.imshow('perspective',dst) cv2.imwrite("image.jpg", dst) cv2.waitKey(0) cv2.destroyAllWindows()
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
上記のコードでは、image10.jpgを読み込み、クリックで4点の座標を決めてESCキーを押すと射影変換が行われ、image.jpgが吐き出されるという感じになっています。
コード中に[0,38]など意味ありげな決め打ちの数値がいくつもみられますが、これらは何を表しているのでしょうか?
変換元の画像、選択すべき4点の座標、理想の(欲しい)結果画像イメージを提示されると回答得られやすくなります。
回答2件
あなたの回答
tips
プレビュー