PYQT 在图片上绘制选择矩形

python

1个回答

写回答

一碗小粥粥

2025-07-01 07:15

+ 关注

Python
Python

使用PYQT在图片上绘制选择矩形是一种常见的图形处理技术,它可以帮助我们在图像上标记感兴趣的区域。在本文中,我们将介绍如何使用PYQT库来实现在图片上绘制选择矩形的功能,并提供一个案例代码来演示该过程。

首先,我们需要安装PYQT库,可以使用pip命令进行安装:

pip install pyqt5

安装完毕后,我们可以开始编写代码。首先,我们需要导入PYQT的一些模块:

Python

from PyQt5.QtWidgets import QApplication, QMAInWindow, QGraphiCSScene, QGraphicsView

from PyQt5.QtGui import QPAInter, QPen

from PyQt5.QtCore import Qt

然后,我们需要创建一个继承自QMAInWindow的自定义窗口类,用于显示图片和处理鼠标事件:

Python

class ImageWindow(QMAInWindow):

def __init__(self, image_path):

super().__init__()

self.setWindowTitle("绘制选择矩形")

# 创建一个场景,并设置背景图片

self.scene = QGraphiCSScene()

self.scene.setBackgroundBrush(Qt.black)

self.setSceneRect(0, 0, self.width(), self.height())

# 创建一个视图,并将场景添加到视图中

self.view = QGraphicsView(self.scene, self)

self.view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

self.view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

self.view.setRenderHint(QPAInter.Antialiasing)

# 加载图片并在场景中显示

self.image = QPixmap(image_path)

self.scene.addPixmap(self.image)

# 设置窗口大小为图片大小

self.resize(self.image.width(), self.image.height())

# 保存选择矩形的坐标

self.start_x = 0

self.start_y = 0

self.end_x = 0

self.end_y = 0

def mousePressEvent(self, event):

# 记录选择矩形的起始坐标

self.start_x = event.x()

self.start_y = event.y()

def mouseReleaseEvent(self, event):

# 记录选择矩形的结束坐标

self.end_x = event.x()

self.end_y = event.y()

# 在场景中绘制选择矩形

self.scene.addRect(self.start_x, self.start_y, self.end_x - self.start_x, self.end_y - self.start_y, QPen(Qt.red))

接下来,我们需要创建一个应用程序,并在应用程序中创建一个自定义窗口实例,将图片路径作为参数传入:

Python

if __name__ == "__mAIn__":

import sys

app = QApplication(sys.argv)

window = ImageWindow("image.jpg")

window.show()

sys.exit(app.exec_())

在上述代码中,我们创建了一个名为ImageWindow的自定义窗口类,该类继承自QMAInWindow,并重写了鼠标点击和释放事件的处理函数。在鼠标点击事件中,我们记录了选择矩形的起始坐标,在鼠标释放事件中,我们记录了选择矩形的结束坐标,并在场景中绘制了选择矩形。最后,我们创建了一个应用程序,并在应用程序中创建了ImageWindow的实例,将图片路径作为参数传入,并展示该窗口。

案例代码:

Python

from PyQt5.QtWidgets import QApplication, QMAInWindow, QGraphiCSScene, QGraphicsView

from PyQt5.QtGui import QPAInter, QPen

from PyQt5.QtCore import Qt

class ImageWindow(QMAInWindow):

def __init__(self, image_path):

super().__init__()

self.setWindowTitle("绘制选择矩形")

# 创建一个场景,并设置背景图片

self.scene = QGraphiCSScene()

self.scene.setBackgroundBrush(Qt.black)

self.setSceneRect(0, 0, self.width(), self.height())

# 创建一个视图,并将场景添加到视图中

self.view = QGraphicsView(self.scene, self)

self.view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

self.view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

self.view.setRenderHint(QPAInter.Antialiasing)

# 加载图片并在场景中显示

self.image = QPixmap(image_path)

self.scene.addPixmap(self.image)

# 设置窗口大小为图片大小

self.resize(self.image.width(), self.image.height())

# 保存选择矩形的坐标

self.start_x = 0

self.start_y = 0

self.end_x = 0

self.end_y = 0

def mousePressEvent(self, event):

# 记录选择矩形的起始坐标

self.start_x = event.x()

self.start_y = event.y()

def mouseReleaseEvent(self, event):

# 记录选择矩形的结束坐标

self.end_x = event.x()

self.end_y = event.y()

# 在场景中绘制选择矩形

self.scene.addRect(self.start_x, self.start_y, self.end_x - self.start_x, self.end_y - self.start_y, QPen(Qt.red))

if __name__ == "__mAIn__":

import sys

app = QApplication(sys.argv)

window = ImageWindow("image.jpg")

window.show()

sys.exit(app.exec_())

在图片上绘制选择矩形

在图像处理中,我们经常需要标记感兴趣的区域。PYQT库提供了一种简单的方法来在图片上绘制选择矩形,以帮助我们标记感兴趣的区域。

使用PYQT绘制选择矩形的方法

PYQT库提供了丰富的图形绘制功能,我们可以利用这些功能在图片上绘制选择矩形。首先,我们需要创建一个自定义窗口类,该类继承自QMAInWindow,并重写鼠标点击和释放事件的处理函数。

在鼠标点击事件中,我们记录了选择矩形的起始坐标,在鼠标释放事件中,我们记录了选择矩形的结束坐标,并在场景中绘制了选择矩形。

示例代码解析

首先,我们导入了PYQT的一些模块,包括QApplication、QMAInWindow、QGraphiCSScene、QGraphicsView、QPAInter和QPen。

然后,我们创建了一个名为ImageWindow的自定义窗口类,该类继承自QMAInWindow。在该类的构造函数中,我们设置了窗口的标题,并创建了一个场景和一个视图。

接着,我们加载了图片,并将其添加到场景中。同时,我们设置了窗口的大小为图片的大小,并初始化了选择矩形的坐标。

在鼠标点击事件中,我们记录了选择矩形的起始坐标。在鼠标释放事件中,我们记录了选择矩形的结束坐标,并在场景中绘制了选择矩形。

最后,我们创建了一个应用程序,并在应用程序中创建了ImageWindow的实例,将图片路径作为参数传入,并展示了该窗口。

在本文中,我们介绍了使用PYQT库在图片上绘制选择矩形的方法,并提供了一个案例代码来演示该过程。通过使用PYQT库,我们可以方便地在图像上标记感兴趣的区域,从而为后续的图像处理工作提供便利。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号