parent
							
								
									6e452c1b27
								
							
						
					
					
						commit
						a1ce549ed8
					
				| @ -0,0 +1,222 @@ | |||||||
|  | import tkinter as tk | ||||||
|  | from tkinter import ttk, messagebox | ||||||
|  | from PIL import Image, ImageTk | ||||||
|  | import basic.basic_process as bp | ||||||
|  | import basic.image_enhance as ie | ||||||
|  | import basic.image_split as isp | ||||||
|  | import basic.image_sharp as ish | ||||||
|  | import basic.image_smooth as ism | ||||||
|  | import basic.digital_morphology as dm | ||||||
|  | import basic.noise_filter as nf | ||||||
|  | import advanced.face.face_recog as fr | ||||||
|  | import advanced.license.license_recog as gui | ||||||
|  | import advanced.track.animal_track as at | ||||||
|  | import os | ||||||
|  | 
 | ||||||
|  | def create_button(parent, text, command): | ||||||
|  |     return tk.Button(parent, text=text, bg='#add8e6', fg='black', font=('Helvetica', 14), width=20, command=command) | ||||||
|  | 
 | ||||||
|  | def create_main_window(): | ||||||
|  |     root = tk.Tk() | ||||||
|  |     root.title("数字图像处理项目") | ||||||
|  |     root.geometry("800x600") | ||||||
|  | 
 | ||||||
|  |     background_image = Image.open("background.jpg") | ||||||
|  |     background_image = background_image.resize((1400, 800), Image.LANCZOS) | ||||||
|  |     bg_image_tk = ImageTk.PhotoImage(background_image) | ||||||
|  | 
 | ||||||
|  |     background_label = tk.Label(root, image=bg_image_tk) | ||||||
|  |     background_label.place(x=0, y=0, relwidth=1, relheight=1) | ||||||
|  | 
 | ||||||
|  |     frame_buttons = tk.Frame(root) | ||||||
|  |     frame_buttons.place(relx=0.5, rely=0.6, anchor=tk.CENTER) | ||||||
|  | 
 | ||||||
|  |     start_button = create_button(frame_buttons, "开始", lambda: open_new_window(root, "main")) | ||||||
|  |     start_button.pack() | ||||||
|  | 
 | ||||||
|  |     root.mainloop() | ||||||
|  | 
 | ||||||
|  | def open_new_window(current_window, window_type): | ||||||
|  |     current_window.withdraw() | ||||||
|  | 
 | ||||||
|  |     new_window = tk.Toplevel(current_window) | ||||||
|  |     new_window.geometry("800x600") | ||||||
|  | 
 | ||||||
|  |     if window_type == "main": | ||||||
|  |         new_window.title("数字图像处理项目") | ||||||
|  | 
 | ||||||
|  |         frame_buttons = tk.Frame(new_window) | ||||||
|  |         frame_buttons.place(relx=0.5, rely=0.5, anchor=tk.CENTER) | ||||||
|  | 
 | ||||||
|  |         basic_button = create_button(frame_buttons, "基础功能", lambda: open_new_window(new_window, "basic")) | ||||||
|  |         basic_button.pack(pady=10) | ||||||
|  | 
 | ||||||
|  |         advanced_button = create_button(frame_buttons, "拓展功能", lambda: open_new_window(new_window, "advanced")) | ||||||
|  |         advanced_button.pack(pady=10) | ||||||
|  | 
 | ||||||
|  |     elif window_type == "basic": | ||||||
|  |         new_window.title("基础功能") | ||||||
|  | 
 | ||||||
|  |         frame_buttons = tk.Frame(new_window) | ||||||
|  |         frame_buttons.place(relx=0.5, rely=0.5, anchor=tk.CENTER) | ||||||
|  | 
 | ||||||
|  |         button_names = ["基本处理", "图像增强", "图像分割", "图像平滑", "图像锐化", "数字形态", "图像恢复"] | ||||||
|  |         for name in button_names: | ||||||
|  |             button = create_button(frame_buttons, name, lambda name=name: open_new_window(new_window, name)) | ||||||
|  |             button.pack(pady=5) | ||||||
|  | 
 | ||||||
|  |     elif window_type == "基本处理": | ||||||
|  |         new_window.title("基本处理") | ||||||
|  | 
 | ||||||
|  |         frame_buttons = tk.Frame(new_window) | ||||||
|  |         frame_buttons.place(relx=0.5, rely=0.5, anchor=tk.CENTER) | ||||||
|  | 
 | ||||||
|  |         button_names = ["选择图片", "仿射变换", "翻转", "算术变换"] | ||||||
|  |         functions = [bp.select_image, bp.affine_tra, bp.turn, bp.arithmetic] | ||||||
|  | 
 | ||||||
|  |         for name, func in zip(button_names, functions): | ||||||
|  |             button = create_button(frame_buttons, name, lambda func=func: func(new_window)) | ||||||
|  |             button.pack(pady=5) | ||||||
|  | 
 | ||||||
|  |     elif window_type == "图像增强": | ||||||
|  |         new_window.title("图像增强") | ||||||
|  | 
 | ||||||
|  |         frame_buttons = tk.Frame(new_window) | ||||||
|  |         frame_buttons.place(relx=0.5, rely=0.5, anchor=tk.CENTER) | ||||||
|  | 
 | ||||||
|  |         button_names = ["选择图片", "线性变换", "对数变换", "直方图均衡化", "直方图正规化"] | ||||||
|  |         functions = [ie.select_image, ie.line_tra, ie.log_tra, ie.equal, ie.regul] | ||||||
|  | 
 | ||||||
|  |         for name, func in zip(button_names, functions): | ||||||
|  |             button = create_button(frame_buttons, name, lambda func=func: func(new_window)) | ||||||
|  |             button.pack(pady=5) | ||||||
|  | 
 | ||||||
|  |     elif window_type == "图像分割": | ||||||
|  |         new_window.title("图像分割") | ||||||
|  | 
 | ||||||
|  |         frame_buttons = tk.Frame(new_window) | ||||||
|  |         frame_buttons.place(relx=0.5, rely=0.5, anchor=tk.CENTER) | ||||||
|  | 
 | ||||||
|  |         button_names = ["选择图片", "阈值化", "边缘检测", "线条变化检测"] | ||||||
|  |         functions = [isp.select_image, isp.threshold, isp.verge, isp.line_chan] | ||||||
|  | 
 | ||||||
|  |         for name, func in zip(button_names, functions): | ||||||
|  |             button = create_button(frame_buttons, name, lambda func=func: func(new_window)) | ||||||
|  |             button.pack(pady=5) | ||||||
|  | 
 | ||||||
|  |     elif window_type == "图像平滑": | ||||||
|  |         new_window.title("图像平滑") | ||||||
|  | 
 | ||||||
|  |         frame_buttons = tk.Frame(new_window) | ||||||
|  |         frame_buttons.place(relx=0.5, rely=0.5, anchor=tk.CENTER) | ||||||
|  | 
 | ||||||
|  |         button_names = ["选择图片", "频域平滑", "空域平滑"] | ||||||
|  |         functions = [ism.select_image, ism.freq_smo, ism.air_smo] | ||||||
|  | 
 | ||||||
|  |         for name, func in zip(button_names, functions): | ||||||
|  |             button = create_button(frame_buttons, name, lambda func=func: func(new_window)) | ||||||
|  |             button.pack(pady=5) | ||||||
|  | 
 | ||||||
|  |     elif window_type == "图像锐化": | ||||||
|  |         new_window.title("图像锐化") | ||||||
|  | 
 | ||||||
|  |         frame_buttons = tk.Frame(new_window) | ||||||
|  |         frame_buttons.place(relx=0.5, rely=0.5, anchor=tk.CENTER) | ||||||
|  | 
 | ||||||
|  |         button_names = ["选择图片", "频域锐化", "空域锐化"] | ||||||
|  |         functions = [ish.select_image, ish.freq_shar, ish.air_shar] | ||||||
|  | 
 | ||||||
|  |         for name, func in zip(button_names, functions): | ||||||
|  |             button = create_button(frame_buttons, name, lambda func=func: func(new_window)) | ||||||
|  |             button.pack(pady=5) | ||||||
|  | 
 | ||||||
|  |     elif window_type == "数字形态": | ||||||
|  |         new_window.title("数字形态") | ||||||
|  | 
 | ||||||
|  |         frame_buttons = tk.Frame(new_window) | ||||||
|  |         frame_buttons.place(relx=0.5, rely=0.5, anchor=tk.CENTER) | ||||||
|  | 
 | ||||||
|  |         button_names = ["选择图片", "腐蚀", "膨胀", "开运算", "闭运算"] | ||||||
|  |         functions = [dm.select_image, dm.corrode, dm.dilatation, dm.open_op, dm.close_op] | ||||||
|  | 
 | ||||||
|  |         for name, func in zip(button_names, functions): | ||||||
|  |             button = create_button(frame_buttons, name, lambda func=func: func(new_window)) | ||||||
|  |             button.pack(pady=5) | ||||||
|  | 
 | ||||||
|  |     elif window_type == "图像恢复": | ||||||
|  |         new_window.title("图像恢复") | ||||||
|  | 
 | ||||||
|  |         frame_buttons = tk.Frame(new_window) | ||||||
|  |         frame_buttons.place(relx=0.5, rely=0.5, anchor=tk.CENTER) | ||||||
|  | 
 | ||||||
|  |         button_names = ["选择图片", "几何均值滤波", "排序统计类滤波", "选择性滤波"] | ||||||
|  |         functions = [nf.select_image, nf.geo_mean_filter, nf.sort_stat_filter, nf.selective_filter] | ||||||
|  | 
 | ||||||
|  |         for name, func in zip(button_names, functions): | ||||||
|  |             button = create_button(frame_buttons, name, lambda func=func: func(new_window)) | ||||||
|  |             button.pack(pady=5) | ||||||
|  | 
 | ||||||
|  |     elif window_type == "advanced": | ||||||
|  |         new_window.title("拓展功能") | ||||||
|  | 
 | ||||||
|  |         frame_buttons = tk.Frame(new_window) | ||||||
|  |         frame_buttons.place(relx=0.5, rely=0.5, anchor=tk.CENTER) | ||||||
|  | 
 | ||||||
|  |         button_names = ["人脸识别", "车牌识别", "动物追踪"] | ||||||
|  |         for name in button_names: | ||||||
|  |             button = create_button(frame_buttons, name, lambda name=name: open_new_window(new_window, name)) | ||||||
|  |             button.pack(pady=5) | ||||||
|  | 
 | ||||||
|  |     elif window_type == "人脸识别": | ||||||
|  |         new_window.title("人脸识别") | ||||||
|  | 
 | ||||||
|  |         frame_buttons = tk.Frame(new_window) | ||||||
|  |         frame_buttons.place(relx=0.5, rely=0.5, anchor=tk.CENTER) | ||||||
|  | 
 | ||||||
|  |         button_names = ["选择图片", "识别"] | ||||||
|  |         functions = [fr.select_image, fr.face_recog] | ||||||
|  | 
 | ||||||
|  |         for name, func in zip(button_names, functions): | ||||||
|  |             button = create_button(frame_buttons, name, lambda func=func: func(new_window)) | ||||||
|  |             button.pack(pady=5) | ||||||
|  | 
 | ||||||
|  |     elif window_type == "车牌识别": | ||||||
|  |         new_window.title("车牌识别") | ||||||
|  | 
 | ||||||
|  |         frame_buttons = tk.Frame(new_window) | ||||||
|  |         frame_buttons.place(relx=0.5, rely=0.5, anchor=tk.CENTER) | ||||||
|  | 
 | ||||||
|  |         button_names = ["选择图片", "识别"] | ||||||
|  |         img_container = {'image': None, 'file_path': None}  # 添加文件路径存储 | ||||||
|  |         functions = [gui.select_image, gui.detect_and_show_processed_image] | ||||||
|  | 
 | ||||||
|  |         for name, func in zip(button_names, functions): | ||||||
|  |             button = create_button(frame_buttons, name, lambda func=func: func(new_window, img_container)) | ||||||
|  |             button.pack(pady=5) | ||||||
|  | 
 | ||||||
|  |     elif window_type == "动物追踪": | ||||||
|  |         new_window.title("动物追踪") | ||||||
|  | 
 | ||||||
|  |         frame_buttons = tk.Frame(new_window) | ||||||
|  |         frame_buttons.pack(expand=True, pady=50)  # 使用 expand=True 让框架在垂直方向上扩展,并添加垂直方向上的间距 | ||||||
|  | 
 | ||||||
|  |         button = tk.Button(frame_buttons, text="选择视频并追踪", bg='#add8e6', fg='black', font=('Helvetica', 14), | ||||||
|  |                            width=20, command=at.select_file_and_run) | ||||||
|  |         button.pack(pady=5) | ||||||
|  | 
 | ||||||
|  |     return_button = create_button(new_window, "返回", lambda: return_to_main_window(current_window, new_window)) | ||||||
|  |     return_button.pack(pady=10, side=tk.BOTTOM) | ||||||
|  | 
 | ||||||
|  |     new_window.protocol("WM_DELETE_WINDOW", lambda: on_close(new_window))  # 处理窗口关闭事件 | ||||||
|  | 
 | ||||||
|  | def return_to_main_window(current_window, new_window=None): | ||||||
|  |     if new_window and new_window.winfo_exists(): | ||||||
|  |         new_window.destroy() | ||||||
|  |     current_window.deiconify() | ||||||
|  | 
 | ||||||
|  | def on_close(root): | ||||||
|  |     if tk.messagebox.askokcancel("退出", "确定要退出程序吗?"): | ||||||
|  |         root.quit() | ||||||
|  | 
 | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     create_main_window() | ||||||
					Loading…
					
					
				
		Reference in new issue