Tkinter软件——显示txt标签的目标水平边框图像

article/2025/7/21 16:43:20

代码:

import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
import cv2
from PIL import Image, ImageTk
import osclass ImageBoxApp:def __init__(self, master):self.master = masterself.master.title("Image Box Drawer")# 第一行:加载TXT文件夹和TXT路径显示self.txt_frame = tk.Frame(master)self.txt_frame.pack()self.load_txt_button = tk.Button(self.txt_frame, text="加载TXT文件夹", command=self.load_txt_folder)self.load_txt_button.pack(side=tk.LEFT)self.txt_path_label = tk.Label(self.txt_frame, text="TXT 文件夹路径: ")self.txt_path_label.pack(side=tk.LEFT)# 第二行:加载图像文件夹和图像路径显示self.img_frame = tk.Frame(master)self.img_frame.pack()self.load_img_button = tk.Button(self.img_frame, text="加载图像文件夹", command=self.load_img_folder)self.load_img_button.pack(side=tk.LEFT)self.img_path_label = tk.Label(self.img_frame, text="图像文件夹路径: ")self.img_path_label.pack(side=tk.LEFT)# 图像显示self.image_label = tk.Label(master)self.image_label.pack()# 最后一行:上一张、下一张按钮和当前图像路径显示self.button_frame = tk.Frame(master)self.button_frame.pack()self.prev_button = tk.Button(self.button_frame, text="上一张", command=self.prev_image)self.prev_button.pack(side=tk.LEFT)self.next_button = tk.Button(self.button_frame, text="下一张", command=self.next_image)self.next_button.pack(side=tk.LEFT)self.image_path_label = tk.Label(self.button_frame, text="当前图像路径: ")self.image_path_label.pack(side=tk.LEFT)self.txt_folder = Noneself.img_folder = Noneself.txt_files = []self.img_files = []self.current_index = 0def load_txt_folder(self):self.txt_folder = filedialog.askdirectory()if not self.txt_folder:returnself.txt_files = [f for f in os.listdir(self.txt_folder) if f.endswith('.txt')]if not self.txt_files:messagebox.showerror("错误", "该文件夹中没有TXT文件")else:self.txt_path_label.config(text=f"TXT 文件夹路径: {self.txt_folder}")def load_img_folder(self):self.img_folder = filedialog.askdirectory()if not self.img_folder:returnself.img_files = [f for f in os.listdir(self.img_folder) if f.endswith(('.png', '.jpg', '.jpeg'))]if not self.img_files:messagebox.showerror("错误", "该文件夹中没有图像文件")else:self.img_path_label.config(text=f"图像文件夹路径: {self.img_folder}")self.current_index = 0self.show_image()def show_image(self):if self.img_files and self.txt_files:img_path = os.path.join(self.img_folder, self.img_files[self.current_index])txt_path = os.path.join(self.txt_folder, self.txt_files[self.current_index])self.image_path_label.config(text=f"当前图像路径: {img_path}")self.draw_boxes(img_path, txt_path)def draw_boxes(self, image_path, txt_path):image = cv2.imread(image_path)height, width, _ = image.shapewith open(txt_path, 'r') as f:lines = f.readlines()for line in lines:parts = line.strip().split()class_id = int(parts[0])x_center = float(parts[1]) * widthy_center = float(parts[2]) * heightbox_width = float(parts[3]) * widthbox_height = float(parts[4]) * heightx1 = int(x_center - box_width / 2)y1 = int(y_center - box_height / 2)x2 = int(x_center + box_width / 2)y2 = int(y_center + box_height / 2)cv2.rectangle(image, (x1, y1), (x2, y2), (255, 0, 0), 2)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)image = Image.fromarray(image)image = ImageTk.PhotoImage(image)self.image_label.config(image=image)self.image_label.image = imagedef prev_image(self):if self.img_files and self.txt_files:if self.current_index == 0:messagebox.showinfo("提示", "已经是第一张图像")else:self.current_index -= 1self.show_image()def next_image(self):if self.img_files and self.txt_files:if self.current_index == len(self.img_files) - 1:messagebox.showinfo("提示", "已经是最后一张图像")else:self.current_index += 1self.show_image()if __name__ == "__main__":root = tk.Tk()app = ImageBoxApp(root)root.mainloop()

测试:


http://www.hkcw.cn/article/aqiWaJwWCO.shtml

相关文章

学习vue3阶段性复习(插槽,Pinia,生命周期)

目录 插槽(匿名插槽,具名插槽) 插槽概述 匿名插槽 具名插槽 Pinia(统一管理,共享数据) pinia概述 安装和使用Pinia 1 使用命令下载Pinia 2 再main.js中导入,注册到vue框架中 3使用pinia 持久化存储插件 1 第一步&…

创建环境 镜像报错UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel...

报错&#xff1a;Platform: win-64 Collecting package metadata (repodata.json): failed UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel anaconda/pkgs/main <https://mirrors.aliyun.com/anaconda/pkgs/main> The channel is not accessible or is inva…

小狼毫输入法雾凇拼音输入方案辅码由默认的部件拆字/拼音输入方案修改为五笔画方案

搜狗拼音输入法不单单是弹出广告的问题&#xff0c;还有收集输入习惯等隐私的嫌疑。所以最近彻底删除了这个输入法&#xff0c;改安装了小狼毫输入法。关于小狼毫输入法的安装和使用网上已经有了无数文章&#xff0c;我这里就不重复了。在试用多个拼音方案后&#xff0c;最终我…

车载通信网络 --- OSI模型中传输层、会话层、表示层和应用层

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

Dify理论+部署+实战

概述 一个功能强大的开源AI应用开发平台&#xff0c;融合后端即服务&#xff08;Backend as Service&#xff09;和LLMOps理念&#xff0c;使开发者能够快速搭建生产级的生成式AI应用。 核心优势 直观的用户界面&#xff1a;提供简洁明了的操作界面&#xff0c;使得用户能够…

Java类和对象详解

文章目录 1.初步认识2.类的定义与实例化2.1 类的定义2.2 类的实例化与使用 3.this关键字4.对象的构造和初始化4.1 默认初始化4.2 就地初始化4.3 构造方法初始化 5.对象的打印6.包的理解6.1 导入包中的类6.2 自定义包6.3 包访问权限 7.封装7.1 访问限定符详解 8.static关键字8.1…

【Go语言】Fyne GUI 库使用指南 (面向有经验开发者)

引言 Fyne 是一个使用 Go 语言编写的、易于使用的跨平台 GUI 工具包和应用程序 API。它旨在通过单一代码库构建在桌面和移动设备上运行的应用程序。本文档面向有一定 Go 语言开发经验的开发者&#xff0c;将详细介绍 Fyne 最新版的核心功能&#xff0c;包括基础组件、布局系统…

1. pytorch手写数字预测

1. pytorch手写数字预测 1.背景2.准备数据集2.定义模型3.dataloader和训练4.训练模型5.测试模型6.保存模型 1.背景 因为自身的研究方向是多模态目标跟踪&#xff0c;突然对其他的视觉方向产生了兴趣&#xff0c;所以心血来潮的回到最经典的视觉任务手写数字预测上来&#xff0…

武警智能兵器室系统架构设计与关键技术解析

在现代化武警部队建设中&#xff0c;武器弹药的安全管理与快速响应能力直接影响部队战斗力。本文基于某实战化智能兵器室建设案例&#xff0c;深入解析其系统架构设计、关键技术实现及创新管理机制&#xff0c;为安防领域提供可借鉴的解决方案。 整体拓扑结构 系统采用分层分布…

HTML5 列表、表格与媒体元素、页面结构分析

1. 列表 无序列表 有序列表 定义列表 列表对比 2. 表格 跨列 跨行 跨行和跨列 3. HTML5的媒体元素 视频元素 注意&#xff1a;autoplay现在很多浏览器不支持了&#xff01; 音频元素 4. 页面结构分析 5. 总结

中文文本分析及词云生成

一、代码解析&#xff08;按执行顺序&#xff09; 1. 库导入 import jieba # 中文分词工具 from wordcloud import WordCloud # 词云生成器 from collections import Counter # 词频统计 import matplotlib.pyplot as plt # 可视化 import numpy as np # 图像矩阵处理 f…

芯片手册解读

一&#xff1a; 1.这是一款差分转单端的芯片&#xff1a; 2.给出了逻辑高低的识别门限&#xff1a;并不是大于100mv和小于-100mv就识别不到了——而是大于100mv和小于-100mv都可以识别到&#xff0c;手册的意思仅仅代表门限节点而已&#xff0c;完全可以在进入门限后的其他电…

LangChain-Tool和Agent结合智谱AI大模型应用实例2

1.Tool(工具) 定义与功能 单一功能模块:Tool是完成特定任务的独立工具,每个工具专注于一项具体的操作,例如:搜索、计算、API调用等 无决策能力:工具本身不决定何时被调用,仅在被触发时执行预设操作 输入输出明确:每个工具需明确定义输入、输出参数及格式 2.Agent(…

专业级图片分割解决方案

在日常处理图片的过程中&#xff0c;我们常常会遇到需要将一张图分割成多个小图的情况。这一款高效又实用的图片分割工具——它操作简单、功能强大&#xff0c;关键是完全免费开源&#xff0c;适合所有有图像处理需求的朋友&#xff01; 在使用之前&#xff0c;先花几分钟把它…

Re--题

一&#xff0e;[NSSCTF 2022 Spring Recruit]easy C 直接看for循环&#xff0c;异或 写代码 就得到了flag easy_Re 二&#xff0e;[SWPUCTF 2021 新生赛]非常简单的逻辑题 先对这段代码进行分析 flag xxxxxxxxxxxxxxxxxxxxx s wesyvbniazxchjko1973652048$-&*&l…

iOS 集成网易云信IM

云信官方文档在这 看官方文档的时候&#xff0c;版本选择最新的V10。 1、CocoPods集成 pod NIMSDK_LITE 2、AppDelegate.m添加头文件 #import <NIMSDK/NIMSDK.h> 3、初始化 NIMSDKOption *mrnn_option [NIMSDKOption optionWithAppKey:"6f6568e354026d2d658a…

边缘计算网关支撑医院供暖系统高效运维的本地化计算与边缘决策

一、项目背景 医院作为人员密集的特殊场所&#xff0c;对供暖系统的稳定性和高效性有着极高的要求。其供暖换热站传统的人工现场监控方式存在诸多弊端&#xff0c;如人员值守成本高、数据记录不及时不准确、故障发现和处理滞后、能耗难以有效监测和控制等&#xff0c;难以满足…

Google Earth Pro 7.3 中文绿色版 - 谷歌地球专业版(精准定位,清晰查看您家位置)

谷歌卫星高清地图 下载链接&#xff1a;https://pan.quark.cn/s/c6069864c9f3 Google Earth Pro-7.3.6.9796-x64 Google Earth WinMac安装版 GoogleEarthProPortable googleearthpromac-intel-7.3.6.10155 GoogleEarthProWin-7.3.6.10155 GoogleEarthProWin-x64-7.3.6.10…

【工作笔记】 WSL开启报错

【工作笔记】 WSL开启报错 时间&#xff1a;2025年5月30日16:50:42 1.现象 Installing, this may take a few minutes... WslRegisterDistribution failed with error: 0x80370114 Error: 0x80370114 ??????????????????Press any key to continue...

《TCP/IP 详解 卷1:协议》第3章:链路层

以太网和IEEE802局域网/城域网标准 IEEE802局域网/城域网标准 IEEE 802 是一组由 IEEE&#xff08;电气与电子工程师协会&#xff09;定义的局域网和城域网通信标准系列&#xff0c;涵盖了从物理层到链路层的多个网络技术。其中&#xff1a; IEEE 802.3 定义的是传统的以太网…