# 座標四点を指定するプログラム
# 実行後謎のウィンドウが残るかもしれません...
import tkinter as tk
import cv2
import yolov5
root = tk.Tk()
root.withdraw()
root.destroy()
from tkinter import messagebox
# 画像を表示する際の倍率です。お好みの大きさに変更してください
img_size = 0.8
window_name = 'img'
before = []
img = cv2.imread(r'practice_exercise_data\img\opencv_img\demoimg_0000.jpg')
weapons = [["左上"], ["右上"], ["右下"], ["左下"]]
def onMouse(event, x, y, flags, params):
if event == cv2.EVENT_LBUTTONDOWN:
x = int(x / img_size)
y = int(y / img_size)
before.append([x,y])
cv2.destroyAllWindows()
if len(before) == 4:
cv2.destroyAllWindows()
for weapon in weapons:
ok = ""
ok = messagebox.showinfo("確認", str(weapon) + "をクリックしてください")
if ok=="ok":
cv2.imshow(window_name, cv2.resize(img, (int(1920 * img_size), int(1080 * img_size))))
cv2.setMouseCallback(window_name, onMouse)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 確認用に赤線を描画しています。マッピングと直接関係はないので気にしなくて大丈夫です。
if len(before) == 4:
cv2.line(img, before[0], before[1], (0, 0, 255), thickness=5)
cv2.line(img, before[1], before[2], (0, 0, 255), thickness=5)
cv2.line(img, before[2], before[3], (0, 0, 255), thickness=5)
cv2.line(img, before[3], before[0], (0, 0, 255), thickness=5)
cv2.imshow(window_name, cv2.resize(img, (int(1920 * img_size), int(1080 * img_size))))
print(before) # クリックした座標を格納している配列を表示
cv2.waitKey(0)
cv2.destroyAllWindows()
else:
print("四点をクリックするまではキーを押さないでください。使いにくくてすみませんm(__)m")