import tkinter as tk
from tkinter import Canvas
from PIL import Image, ImageTk
# ウィンドウのクラス
class Window:
# ウィンドウのサイズ
WIDTH = 800
HEIGHT = 600
# コンストラクタ
def __init__(self, root):
# ウィンドウの設定
self.root = root
self.canvas = Canvas(root, width=self.WIDTH, height=self.HEIGHT)
self.canvas.pack()
# 画像の読み込み
self.image = Image.open("source.jpg")
# 画像をリサイズする
self.image_resized = self.image.resize((self.WIDTH, self.HEIGHT))
# 画像をCanvasに表示する
self.photo = ImageTk.PhotoImage(self.image_resized)
self.canvas.create_image(0, 0, image=self.photo, anchor=tk.NW)
# クリックイベントの設定
self.canvas.bind("<Button-1>", self.on_click)
# クリックイベント
def on_click(self, event):
# クリックした位置の座標を取得する
x = event.x
y = event.y
# 元画像のサイズ
original_width, original_height = self.image.size
# クリックした位置の元画像の座標を計算する
original_x = int(x * original_width / self.WIDTH)
original_y = int(y * original_height / self.HEIGHT)
# 元画像上の座標を表示
print(f"元画像上の座標: ({original_x}, {original_y})")
# メイン
if __name__ == "__main__":
# ウィンドウの作成
root = tk.Tk()
# ウィンドウのタイトル
root.title("1")
window = Window(root)
# ループ
root.mainloop()
コンソールの表示例
import cv2
import numpy as np
# 画像の読み込み
img = cv2.imread('source.jpg')
# 画像のサイズを取得
height, width = img.shape[:2]
# 変換エリアの頂点座標を指定(左上、右上、右下、左下の順)
# 数値は元画像によって変わる
corner = np.array([[578, 1003],
[2213, 492],
[2295, 1477],
[474, 1527]],
dtype=np.float32)
# 変換後の画像サイズを指定
# 数値は元画像によって変わる
new_width = 1000
new_height = 400
# 変換後の頂点座標を指定(左上、右上、右下、左下の順)
new_corner = np.array([[0, 0],
[new_width, 0],
[new_width, new_height],
[0, new_height]],
dtype=np.float32)
# 透視変換行列を計算
M = cv2.getPerspectiveTransform(corner, new_corner)
# 透視変換を実行
new_img = cv2.warpPerspective(img, M, (new_width, new_height))
# 画像を保存
cv2.imwrite('2.jpg', new_img)
できる画像