小编Mut*_*sim的帖子

PyQT4 - 在图像上绘画以进行区域选择

我想使用 PyQT4 编写一个图像标记工具:

  • 从指定文件夹加载大量图像;对于每个图像:
    • 用户通过用鼠标绘制该对象的区域,从图像中选择对象(例如,汽车)
    • 选择完成后,对象蒙版显示在原始图像上
    • 当所有对象的选择完成后,程序将每个对象遮罩(背景:0,前景:255)保存为单独的 png 图像
  • 用户应该能够放大/缩小图像

我已经用 wxWidgets 在 c++ 中编写了一个类似的程序(没有放大/缩小)。我对 PyQT4 很陌生,并试图了解事情是如何工作的。最困难的部分似乎是在用户放大/缩小时绘制和正确获取对象蒙版。

哪些 PyQT 类最适合解决这个问题?如何正确获取对象掩码(可能是 numpy 数组)并保存它们?

非常感谢。


按照你的建议,我写了一段代码,显示一个图像并用鼠标在图像上绘制(还在实验和学习阶段)。

我将图像存储在 QGraphicsPixmapItem 中,将其添加到场景中。然后,我通过覆盖其绘制方法来绘制图像。最后,我覆盖鼠标事件以获取鼠标位置并在那里画一个圆圈。但是当我移动鼠标时,旧圆圈被删除并绘制一个新圆圈。也就是说,圆圈没有画在图像本身上。我想,我应该使用类似下面的东西,这样绘画才能在图像上永久存在:

painter = QPainter()
painter.begin(pixmap)
# here do the drawing
painter.end() 
Run Code Online (Sandbox Code Playgroud)

但是,问题是,paint 函数已经将画家作为参数;在paint函数中重新创建一个新的不起作用(显然)。

这是代码:

from PyQt4.QtCore import *
from PyQt4.QtGui import *

class ImageDrawPanel(QGraphicsPixmapItem):
    def __init__(self, pixmap=None, parent=None, scene=None):
        super(ImageDrawPanel, self).__init__()
        self.x, self.y = -1, -1        
        self.radius = 10

        self.pen = QPen(Qt.SolidLine)
        self.pen.setColor(Qt.black)
        self.pen.setWidth(2)

        self.brush = QBrush(Qt.yellow)


    def paint(self, painter, option, widget=None):               
        painter.drawPixmap(0, 0, …
Run Code Online (Sandbox Code Playgroud)

image paint mouseevent pyqt4

5
推荐指数
1
解决办法
5420
查看次数

标签 统计

image ×1

mouseevent ×1

paint ×1

pyqt4 ×1