按住鼠标左键画框,裁切画面并局部放大,可以用来生成ROI
1、在QtDesigner中创建ui文件,命名为crop.ui:
2、自定义脚本ImageLabel.py :
from PySide6.QtCore import Qt, QRect, Signal, QPoint
from PySide6.QtGui import QPixmap, QPainter, QPen, QColor
from PySide6.QtWidgets import QLabel
class ImageLabel(QLabel):
src_info = Signal(str)
crop_info = Signal(str)
show_info = Signal(str)
def __init__(self, parent=None):
super().__init__(parent)
self.scale = 1.0 # 显示比例,其含义为当前的显示窗口的每个像素代表原始图几个像素
self.src_width = 1
self.src_height = 1
self.showing_pixmap = QPixmap() # 当前显示的图像内容(从原图原比例裁切而来)
self.scaled_image = QPixmap() # 当前显示的图像内容(经过缩放适应窗口的)
self.scaled_image_x0 = 0 # 显示内容的x起点
self.scaled_image_y0 = 0 # 显示内容的y起点
self.erase = False # 擦除已有的方框
self.start_pos = QPoint() # 鼠标起始点
self.end_pos = QPoint() # 鼠标结束点
self.show_rect = QRect(0, 0, 1, 1) # 显示窗口维度的方框
self.crop_rect = QRect(0, 0, 1, 1) # 实际像素维度的方框
# 重新定义鼠标按下事件
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.start_pos = event.position().toPoint()
self