展示所选图片在同一文件夹下的所有相似图片的GUI界面代码
时间: 2024-05-06 17:15:34 浏览: 20
以下是一个使用Python和Tkinter编写的GUI界面,可以选择一张图片并显示与它相似的所有图片:
```python
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk
import numpy as np
import os
import cv2
from skimage.measure import compare_ssim
import heapq
class ImageSimilarityGUI():
def __init__(self):
self.root = tk.Tk()
self.root.title("Image Similarity GUI")
self.filename = None
self.img_label = None
# Create widgets
self.create_widgets()
def create_widgets(self):
# Create frame for selecting image file
file_frame = tk.Frame(self.root)
file_frame.pack(side=tk.TOP, padx=10, pady=10)
# Create button to select image file
select_button = tk.Button(file_frame, text="Select Image", command=self.select_image)
select_button.grid(row=0, column=0)
# Create label to show selected image file path
self.file_label = tk.Label(file_frame, text="")
self.file_label.grid(row=0, column=1)
# Create frame for displaying image
image_frame = tk.Frame(self.root)
image_frame.pack(side=tk.TOP, padx=10, pady=10)
# Create label to display image
self.img_label = tk.Label(image_frame)
self.img_label.pack()
# Create button to find similar images
similar_button = tk.Button(self.root, text="Find Similar Images", command=self.find_similar_images)
similar_button.pack(side=tk.TOP, padx=10, pady=10)
# Create frame to display similar images
self.similar_frame = tk.Frame(self.root)
self.similar_frame.pack(side=tk.TOP, padx=10, pady=10)
def select_image(self):
# Open file dialog to select image file
self.filename = filedialog.askopenfilename(initialdir="./", title="Select Image File",
filetypes=(("Image Files", "*.png *.jpg *.jpeg"),))
# Display selected image file path
self.file_label.config(text=self.filename)
# Load image and display on label
img = Image.open(self.filename)
img = img.resize((300, 300))
img = ImageTk.PhotoImage(img)
self.img_label.config(image=img)
self.img_label.image = img
def find_similar_images(self):
# Load selected image and convert to grayscale
img = cv2.imread(self.filename)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Get all images in directory and calculate similarity with selected image
similar_images = []
for file in os.listdir("./"):
if file.endswith(".jpg") or file.endswith(".jpeg") or file.endswith(".png"):
# Load image and convert to grayscale
current_image = cv2.imread(file)
current_gray = cv2.cvtColor(current_image, cv2.COLOR_BGR2GRAY)
# Calculate structural similarity index
ssim = compare_ssim(gray, current_gray)
# Add similarity and filename to list
heapq.heappush(similar_images, (-ssim, file))
# Display similar images
for widget in self.similar_frame.winfo_children():
widget.destroy()
for i in range(5):
similarity, filename = heapq.heappop(similar_images)
similarity = round(-similarity, 2)
# Load image and display on label
img = Image.open(filename)
img = img.resize((300, 300))
img = ImageTk.PhotoImage(img)
img_label = tk.Label(self.similar_frame, text=f"Similarity: {similarity}")
img_label.pack(side=tk.LEFT, padx=10, pady=10)
img_label.img = img
img_label.config(image=img)
def run(self):
self.root.mainloop()
if __name__ == "__main__":
gui = ImageSimilarityGUI()
gui.run()
```
该GUI界面包括一个按钮,可以选择一张图片并将其显示在窗口中。在选择图片后,用户可以点击另一个按钮来查找与所选图片相似的所有图片。在查找相似图片后,程序会在窗口中显示5张与所选图片相似度最高的图片。
相关推荐
![py](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)