Tkinter軟件——顯示txt標簽的目標水平邊框圖像

代碼:

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.pswp.cn/bicheng/83102.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83102.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83102.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 文件覆蓋機制與實踐:以 mv 命令為切入點

引言:文件覆蓋的本質 文件覆蓋是 Linux 文件系統中常見的操作,指的是在目標路徑已存在文件的情況下,將源文件的內容寫入目標文件,導致目標文件的原有內容被替換。在 Linux 中,文件覆蓋通常通過命令行工具(…

學習路之PHP--easyswoole操作數據庫

學習路之PHP--easyswoole操作數據庫 0、安裝orm插件一、創建數據庫二、創建模型三、控制器顯示四、效果五、問題 0、安裝orm插件 composer require easyswoole/orm一、創建數據庫 表: CREATE TABLE cases (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主鍵,titl…

手寫multi-head Self-Attention,各個算子詳細注釋版

文章目錄 MultiHeadAttentionFormal的實現操作詳解1. 🔍 attention_mask2. 🔍 matmul? 其他實現方式1. 使用 運算符(推薦簡潔寫法)2. 使用 torch.einsum()(愛因斯坦求和約定)3. 使用 torch.bmm()&#xf…

尚硅谷redis7 41-46 redis持久化之AOF異常恢復演示

AOF每一秒鐘寫入一次。當內容才寫了一小半,沒有寫完整時,突然,redis掛了,導致aof文件錯誤。 故意亂寫正常的AOF文件,模擬網絡閃斷文件寫error 重啟 Redis 之后就會進行AOF文件的載入,發現啟動都失敗 首先cd /usr/local/bin 異常修復命令:redis-check-aof -- fix 進…

004時裝購物系統技術解析:構建智能時尚消費平臺

時裝購物系統技術解析:構建智能時尚消費平臺 在電商行業蓬勃發展的當下,時裝購物系統憑借其便捷性與多樣性,成為消費者選購時尚單品的重要渠道。該系統通過商品信息、訂單管理等核心模塊,結合前臺展示與后臺錄入功能,…

數據湖 (特點+與數據倉庫和數據沼澤的對比講解)

數據湖就像一個“數據水庫”,把企業所有原始數據(結構化的表格、半結構化的日志、非結構化的圖片/視頻)原樣存儲,供后續按需分析。 對比傳統數據倉庫: 數據倉庫數據湖數據清洗后的結構化數據(如Excel表格&…

深度剖析Node.js的原理及事件方式

早些年就接觸過Node.js,當時對于這個連接前后端框架就感到很特別。尤其是以獨特的異步阻塞特性,重塑了了服務器端編程的范式。后來陸陸續續做了不少項目,通過實踐對它或多或少增強了不少理解。今天,我試著將從將從原理層剖析其運行…

【AI預測】5月30日尼克斯大戰前瞻:東部黑馬能否再下一城?

🏀 隨著賽季進入白熱化階段,5月30日尼克斯的這場比賽注定焦點十足。作為東部近年來少有的“黑馬型”球隊,尼克斯用硬朗的防守和團隊配合讓人重新認識了這支老牌勁旅。 這篇文章,我們將從數據模型球員表現戰術執行力三個維度&…

人工智能賦能基礎教育個性化學習的理論建構與實踐探索

一、引言 1.1 研究背景與意義 隨著科技的飛速發展,人工智能(Artificial Intelligence,AI)已逐漸成為推動社會進步的重要力量。在教育領域,人工智能的應用正逐步改變傳統的教學模式,為個性化學習提供了新…

歷年四川大學計算機保研上機真題

2025四川大學計算機保研上機真題 2024四川大學計算機保研上機真題 2023四川大學計算機保研上機真題 在線測評鏈接:https://pgcode.cn/school 分數求和 題目描述 有一分數序列: 2 / 1 2/1 2/1, 3 / 2 3/2 3/2, 5 / 3 5/3 5/3, 8 / 5 8/5 8/5, 13 /…

正點原子Z15I ZYNQ 開發板發布!板載PCIe2.0、SPFx2、MIPI CSI等接口,資料豐富!

正點原子Z15I ZYNQ 開發板發布!板載PCIe2.0、SPFx2、MIPI CSI等接口,資料豐富! 正點原子Z15I ZYNQ開發板,核心板全工業級設計,主控芯片的型號是XC7Z015CLG485-2I。開發板由核心板+底板組成,外設…

Ubuntu 22.04 上使用 Docker 安裝 RagFlow

GitHub地址:添加鏈接描述 RAGFlow 是一款開源的檢索增強生成(Retrieval-Augmented Generation,簡稱 RAG)引擎,旨在通過深度文檔理解技術,結合大語言模型(LLM),為用戶提供高質量、可溯源的問答服務。 ?? 快速入門 RAGFlow 提供了便捷的部署方式,支持 Docker 環境。…

【論文閱讀】DanceGRPO: Unleashing GRPO on Visual Generation

DanceGRPO: Unleashing GRPO on Visual Generation 原文摘要 研究背景與問題 生成模型的突破:擴散模型和整流流等生成模型在視覺內容生成領域取得了顯著進展。核心挑戰:如何讓模型的輸出更好地符合人類偏好仍是一個關鍵問題。現有方法的局限性&#xff1…

Milvus可視化客戶端Attu安裝與使用指南

導讀:在向量數據庫運維管理中,開發者往往面臨著復雜的命令行操作和繁瑣的API調用挑戰。作為Milvus向量數據庫的官方圖形化管理工具,Attu為這一痛點提供了優雅的解決方案。 本文深入解析Attu的核心架構和實用功能,重點介紹其在數據…

C# 結合PaddleOCRSharp搭建Http網絡服務

Windows打開端口: 控制面板 > 系統和安全 > 防火墻> 高級設置 → 入站規則 → 右側選擇 → 新建規則 → 端口 → 協議類型 TCP→ 端口 using System; using System.Drawing; using System.IO; using System.Net; using System.Text; using System.Threadi…

【論文精讀】2024 ECCV--MGLD-VSR現實世界視頻超分辨率(RealWorld VSR)

文章目錄 一、摘要二、問題三、Method3.1 Latent Diffusion Model3.2 Motion-guided Diffusion Sampling3.3 Temporal-aware Decoder Fine-tuning 四、實驗設置4.1 訓練階段4.2 訓練數據 貢獻總結 論文全稱: Motion-Guided Latent Diffusion for Temporally Consis…

初學c語言21(文件操作)

一.為什么使用文件 之前我們寫的程序的數據都是存儲到內存里面的,當程序結束時,內存回收,數據丟失, 再次運行程序時,就看不到上次程序的數據,如果要程序的數據一直保存得使用文件 二.文件 文件一般可以…

歷年廈門大學計算機保研上機真題

2025廈門大學計算機保研上機真題 2024廈門大學計算機保研上機真題 2023廈門大學計算機保研上機真題 在線測評鏈接:https://pgcode.cn/school 數字變換過程的最大值與步數 題目描述 輸入一個數字 n n n,如果 n n n 是偶數就將該偶數除以 2 2 2&…

MySql--定義表存儲引擎、字符集和排序規則

示例: CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,email VARCHAR(100) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;注意事項: 字符集和排序規則可以按列覆蓋表…

深耕數字化賽道,聯眾優車以創新風控體系構筑汽車金融護城河

近年來,在汽車金融市場規模持續擴大的行業背景下,企業風險管理能力已成為決定市場競爭格局的關鍵要素。面對快速擴張的市場需求,銀保監會2024年發布的《汽車金融公司監管評級辦法》明確要求行業強化風控能力建設,央行《金融科技發…