目前还在学习当中,实现的功能有打开图片,显示图片,为图片标记坐标框,保存图片。
TKinter为python自带的框架,不需要额外pip
代码如下:
from tkinter import *
from time import *
import tkinter.filedialog
import io
import cv2
from PIL import Image, ImageTk
root = Tk()
w_box = 1280
h_box = 640
root.title('RectOnPic Tool')
root.geometry('1280x640')
e = StringVar()
# print(e)
e_entry = Entry(root, textvariable=e)
e_entry.grid(row=6, column=1, padx=10, pady=5)
# print(e_entry.get())
# root.resizable(0,0)
submit_button = Button(root, text="选择文件", command=root.quit)
global imgGl
imgGl = Label(root, image=None)
imgGl.place(x=300, y=0)
def resize(w_box, h_box, pil_image):
w, h = pil_image.size
f1 = 1.0 * w_box / w
f2 = 1.0 * h_box / h
factor = min([f1, f2])
width = int(w * factor)
height = int(h * factor)
return pil_image.resize((width, height), Image.ANTIALIAS)
def choose_file():
selectFileName = tkinter.filedialog.askopenfilename(title='选择文件')
# print(selectFileName)
e.set(selectFileName)
def showImg(img1):
imgGl.config(image='')
load = Image.open(img1)
pil_image_resized = resize(w_box, h_box, load)
render = ImageTk.PhotoImage(pil_image_resized)
imgGl.image = render
imgGl.config(image=render)
def showImgAgain(img2):
img = cv2.imread(img2)
r = cv2.selectROI('ROI',img,False,False)
cv2.rectangle(img, (int(r[0]), int(r[1])), (int(r[0]+r[2]), int(r[1] + r[3])), (0, 255, 0), 4)
cv2.imwrite('completed.jpg', img)
showImg('completed.jpg')
Button(root, text='退出', width=10, command=root.quit)\
.grid(row=9, column=0, sticky=W, padx=10, pady=5)
Button(root, text="选择文件", width=10, command=choose_file)\
.grid(row=6, column=0, sticky=W, padx=10, pady=5)
Button(root, text="显示图片", width=10,command=lambda: showImg(e_entry.get()))\
.grid(row=7, column=0, sticky=W, padx=10, pady=5)
Button(root, text="画坐标框", width=10,command=lambda: showImgAgain(e_entry.get()))\
.grid(row=8, column=0, sticky=W, padx=10, pady=5)
mainloop()
运行结果截图如下: