优化这个代码,使每次导入图片都能动态识别显示坐标并划线
时间: 2024-03-02 16:48:18 浏览: 112
好的,我会进行修改,使得每次导入图片都能动态识别显示坐标并划线。
首先,需要在 `find_image_location` 函数中添加一个参数 `show`,用于控制是否显示图片及标识出图片位置坐标。当 `show` 参数为 `True` 时,程序会在屏幕上显示图片,并标识出位置坐标;当 `show` 参数为 `False` 时,程序会返回位置坐标,但不会显示图片。
然后,在 `Application` 类的 `select_image` 方法中,调用 `find_image_location` 函数时,将 `show` 参数设置为 `True`,以显示图片并标识出位置坐标。
完整的代码如下:
```python
import tkinter as tk
from tkinter import filedialog
import pyautogui
import cv2
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
self.select_button = tk.Button(self)
self.select_button["text"] = "选择图片"
self.select_button["command"] = self.select_image
self.select_button.pack(side="top")
self.result_label = tk.Label(self)
self.result_label.pack(side="bottom")
def select_image(self):
# 弹出文件选择对话框选择要查找的图片
file_path = filedialog.askopenfilename(title="选择图片文件", filetypes=[("Image files", "*.png;*.jpg;*.jpeg")])
# 如果选择了图片则查找图片位置
if file_path:
location = find_image_location(file_path, show=True)
if location is not None:
self.result_label["text"] = f"图片 {file_path} 的位置坐标为:{location}"
else:
self.result_label["text"] = f"图片 {file_path} 不存在于桌面"
def find_image_location(image_path, show=True):
# 加载图片
img = cv2.imread(image_path)
# 查找图片位置
location = pyautogui.locateOnScreen(image_path)
if location is not None:
# 获取图片中心点的坐标
x, y = pyautogui.center(location)
# 在图片上标识出位置坐标
cv2.line(img, (x-10, y), (x+10, y), (0, 255, 0), 2)
cv2.line(img, (x, y-10), (x, y+10), (0, 255, 0), 2)
if show:
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
return (x, y)
else:
return None
root = tk.Tk()
app = Application(master=root)
app.mainloop()
```
这样,每次用户选择一个图片后,程序都会动态识别并显示图片位置坐标,并在图片上标识出位置坐标。
阅读全文