没有合适的资源?快使用搜索试试~ 我知道了~
首页Python tkinter实现图片标注功能(完整代码)
资源详情
资源评论
资源推荐

Python tkinter实现图片标注功能实现图片标注功能(完整代码完整代码)
tkinter是Python下面向tk的图形界面接口库,可以方便地进行图形界面设计和交互操作编程,本文通过实例代码给大
家介绍的Python tkinter实现图片标注功能,感兴趣的朋友一起看看吧
.tkinter
tkinter是Python下面向tk的图形界面接口库,可以方便地进行图形界面设计和交互操作编程。tkinter的优点是简单易用、与Python
的结合度好。tkinter在Python 3.x下默认集成,不需要额外的安装操作;不足之处为缺少合适的可视化界面设计工具,需要通过代
码来完成窗口设计和元素布局。
Python tkinter实现图片标注代码,代码如下所述:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
import sys
if sys.version_info < (3, 0):
import Tkinter as tk # 导入 Tkinter 库
from tkFileDialog import askopenfilename, asksaveasfilename
else :
import tkinter as tk # 导入 Tkinter 库
from tkinter.filedialog import askopenfilename, asksaveasfilename
from PIL import Image, ImageTk, ImageDraw
from time import sleep
import numpy as np
import cv2 as cv
DEF_WIDTH = 1080
DEF_HEIGHT = 720
IMAGE_HEIGHT = 720
FRAME_LEFT_WIDTH = 360
# 太小的选定区域我们需要丢弃,防止误操作
MINI_RECT_AREA = 20
class RawImageEditor:
def __init__(self, win, img, rects):
#变量X和Y用来记录鼠标左键按下的位置
self.X = tk.IntVar(value=0)
self.Y = tk.IntVar(value=0)
self.sel = False
self.lastDraw = None
self.lastDraws = []
self.imageScale = 1.0
self.dispWidth = DEF_WIDTH # 图片显示区域的最大高度,宽度
self.dispHeight = DEF_HEIGHT
self.rawImage = img
self.calcImageScale(self.rawImage)
self.dispWidth = int(self.imageScale * self.rawImage.width)
self.dispHeight = int(self.imageScale * self.rawImage.height)
# 图片缩放
self.dispImage = self.rawImage.resize((self.dispWidth, self.dispHeight))
# 选择区域
self.selPositions = []
for r in rects :
self.selPositions.append((r[0] * self.imageScale, r[1] * self.imageScale, r[2] * self.imageScale, r[3] * self.imageScale))
#创建顶级组件容器
self.top = tk.Toplevel(win, width=self.dispWidth, height=self.dispHeight)
#不显示最大化、最小化按钮
self.top.overrideredirect(True)
# Make topLevelWindow remain on top until destroyed, or attribute changes.
self.top.attributes('-topmost', 'true')
self.canvas = tk.Canvas(self.top, bg='white', width=self.dispWidth, height=self.dispHeight)
self.tkImage = ImageTk.PhotoImage(self.dispImage)
self.canvas.create_image(self.dispWidth//2, self.dispHeight//2, image=self.tkImage)
for r in self.selPositions :
draw = self.canvas.create_rectangle(r[0], r[1], r[2], r[3], outline='green')
self.lastDraws.append(draw)
#鼠标左键按下的位置
def onLeftButtonDown(event):
self.X.set(event.x)
self.Y.set(event.y)
#开始截图
self.sel = True
#重新绘制已经选择的区域
for draw in self.lastDraws :
self.canvas.delete(draw)
self.lastDraws = []
for r in self.selPositions :
draw = self.canvas.create_rectangle(r[0], r[1], r[2], r[3], outline='green')
self.lastDraws.append(draw)
self.canvas.bind('<Button-1>', onLeftButtonDown)
#鼠标左键移动,显示选取的区域



















weixin_38545768
- 粉丝: 8
- 资源: 942
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
最新资源
- ARM Cortex-A(armV7)编程手册V4.0.pdf
- ABB机器人保养总结解析.ppt
- 【超详细图解】菜鸡如何理解双向链表的python代码实现
- 常用网络命令的使用 ipconfig ping ARP FTP Netstat Route Tftp Tracert Telnet nslookup
- 基于单片机控制的DC-DC变换电路
- RS-232接口电路的ESD保护.pdf
- linux下用time(NULL)函数和localtime()获取当前时间的方法
- Openstack用户使用手册.docx
- KUKA KR 30 hA,KR 60 hA机器人产品手册.pdf
- Java programming with JNI
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论0