在利用QT编写GUI程序时经常需要一些交互操作,常见的有鼠标事件,键盘事件等。今天我们要实现的是在标签中已经显示的图像中绘制矩形框,以便进行下一步操作(如放大细节,选中感兴趣区域等)程序主要参考了知乎的小杨老师的专栏。
<强>核心点是重写标签,使其实现相应的功能,看下面的一个小例子强>
从PyQt5。QtWidgets进口QWidget QApplication QLabel 从PyQt5。QtCore进口QRect, Qt 从PyQt5。QtGui进口打印大师,QPixmap、QPainter QPen QGuiApplication 进口cv2 导入系统 MyLabel类(QLabel): x0=0 y0=0 x1=0 日元=0 国旗=False #鼠标点击事件 def mousePressEvent(自我、事件): 自我。国旗=True 自我。x0=event.x () 自我。y0=event.y () #鼠标释放事件 def mouseReleaseEvent(自我、事件): 自我。国旗=False #鼠标移动事件 def摇干(自我、事件): 如果self.flag: 自我。x1=event.x () 自我。日元=event.y () self.update () #绘制事件 def paintEvent(自我、事件): super () .paintEvent(事件) 矩形=QRect(自我。x0,自我。y0, abs (self.x1-self.x0), abs (self.y1-self.y0)) 画家=QPainter(自我) painter.setPen (QPen (Qt.red 2 Qt.SolidLine)) painter.drawRect(矩形) 类的例子(QWidget): def __init__(自我): super () . __init__ () self.initUI () def initUI(自我): 自我。调整(675、300) self.setWindowTitle(“在标签中绘制矩形”) 自我。磅=MyLabel(自我)#重定义的标签 self.lb。setGeometry (QRect (30、30、511、541)) img=cv2.imread(“2. jpg”) 高度、宽度、bytesPerComponent=img.shape bytesPerLine=3 *宽度 cv2。cvtColor (img cv2。COLOR_BGR2RGB img) QImg=打印大师(img。数据、宽度、高度、bytesPerLine QImage.Format_RGB888) 象图=QPixmap.fromImage (QImg) self.lb.setPixmap(象图) self.lb.setCursor (Qt.CrossCursor) self.show () if __name__==癬_main__”: 应用=QApplication (sys.argv) x=()例子 sys.exit (app.exec_ ()) >之前
<>强运行结果如上所示,可以拖动鼠标实现在标签显示的图像上绘制矩形框。强>
以上这篇PyQt5在标签显示的图片中绘制矩形的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
PyQt5在标签显示的图片中绘制矩形的方法