python图像标注_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 = Tru

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值