step1、搭建主界面,为演示使用,主界面仅包括一个button和一个lable,并在label中设置背景图( self.label.setPixmap(QtGui.QPixmap("…/…/libo.jpg"))
为了让背景图自动填充label,需要加上self.label.setScaledContents(True)
step2、由于需要在label上作图,所以要重写label类,命名为Mylabel,该类中主要为进行框选作图,并实时更新
step3、为了根据界面大小,框选自动跟随,需要添加 def resizeEvent(self, event)函数,该函数会自动监控界面大小变化
step4、通过button输入初始坐标
实现框选跟随的实现主要通过更新label的长宽的变化来实现起始坐标的变化,以及放大倍数的变化
from PyQt5.QtGui import *
from PyQt5.QtCore import QRect,Qt,QPoint
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication,QMainWindow
import sys
from PyQt5.QtWidgets import QWidget, QApplication, QLabel
import json
import sys
import time
import re
import cv2
a = [0] # x坐标相对位置(以第一次为参考)
b = [0] # 坐标相对位置(以第一次为参考)
x_start = [0] # 起始点的x坐标
y_start = [0] # 起始点的Y坐标
x_length = [0] # 长度
y_width = [0] # 宽度
label_x0 = [] # label的起点x坐标
label_x1 = [] # label的起点y坐标
label_y0 = [] # label的长度
label_y1 = [] # label的高度
x_auto = [1] # label长度的放大倍数
y_auto = [1] # label高度的放大倍数
class MyLabel(QLabel):
def paintEvent(self, event):
super().paintEvent(event)
rect_0 = QRect(x_start[-1], y_start[-1], abs(x_length[-1]*x_auto[-1