使用PyQt在图像上绘制框?

时间:2018-07-09 02:13:24

标签: python python-3.x csv pyqt pyqt5

如果可能,我想创建框(正方形)以使用PyQt突出显示图像中的小对象。我已使用Pixmap将图像设置在标签中。我的目标是单击一个按钮(使用QtDesigner创建),然后“打开”将在图像上显示的框。

我希望将其分配给该按钮的按钮名为pushButtonToggle。我还希望获得单击该按钮时的功能,以将图标从“关闭”开关的图标更改为“开启”开关的图标。我已经使用Qt Designer中的图标完成了所有UI工作,但是我不知道如何使“关闭”图标“激活”并切换到“开启”图标图像。但是我当前面临的最重要的问题是,在尝试创建这些框时不知道从哪里开始。我得到了一个CSV文件,每个框都有一个x,y,w和h。以下是示例坐标:x = 4.636915409564971924e + 02,y = 3.457265897989273071e + 02,w = 5.272114515304565430e + 01,h = 4.602192258834838867e + 01,我将从给定的CSV文件中提取该信息。

下面是我认为可能相关的代码片段,但我真的觉得我是从头开始创建盒子,除了使用opencv之外,我在网上找不到太多帮助。尽管我知道在这种情况下这可能是一条更简单的方法,但我希望在可能的情况下使用PyQt,希望能帮助我入门。

Util.py

class MockupApp(QtWidgets.QMainWindow,mockup1.Ui_MainWindow):
    def __init__(self):
        super(MockupApp, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.pixmap = QPixmap("/Users/PythonPrograms/photo.jpeg")
        self.ui.label.setPixmap(self.pixmap)
        self.ui.label.setScaledContents(True)

        self.populateTable()

    def populateTable(self):
        _translate = QtCore.QCoreApplication.translate
        data = np.loadtxt('/Users/PythonPrograms/file.csv', delimiter=',')
        classes = data[:,4]
        unique, counts = np.unique(classes, return_counts=True)
        num_zero = counts[0]
        num_one = counts[1]
        num_two = counts[2]
        print(unique, counts)
        self.ui.tableWidgetName.item(0, 0).setText(_translate("MainWindow", str(int(num_zero/len(classes)*100)) + '%'))
        self.ui.tableWidgetName.item(1, 0).setText(_translate("MainWindow", str(int(num_one/len(classes)*100))+'%'))
        self.ui.tableWidgetName.item(2, 0).setText(_translate("MainWindow", str(int(num_two/len(classes)*100)) + '%'))


    if  __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MockUp = MockupApp()
    MockUp.show()
    sys.exit(app.exec_())

Ui.py

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 480)
        self.pushButtonToggle = QtWidgets.QPushButton(self.verticalLayoutWidget_6)
        self.pushButtonToggle.setAutoFillBackground(False)
        self.pushButtonToggle.setText("")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/icons/turnoff.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        icon.addPixmap(QtGui.QPixmap(":/icons/turnon.png"), QtGui.QIcon.Normal, QtGui.QIcon.On)
        self.pushButtonToggle.setIcon(icon)
        self.pushButtonToggle.setIconSize(QtCore.QSize(55, 40))
        self.pushButtonToggle.setFlat(True)
        self.pushButtonToggle.setObjectName("pushButtonToggle")
        self.horizontalLayout_4.addWidget(self.pushButtonToggle)

0 个答案:

没有答案