OpenCV中的轮廓(2)

来源:互联网 发布:买域名是啥 编辑:程序博客网 时间:2024/05/29 18:10

即上次说了OpenCV中的轮廓的理论知识,接下来做个小工具去实现这些功能,包含之前的轮廓检测以及图像金字塔。由于时间有限拉普拉斯金字塔没有实现,还有轮廓的性质没有获取显示出来,这里讲给出源码,有兴趣的可以自行添加。 本人运行的环境是:python3.6 PyQt5.9 Matplotlib openCV3 等
效果如图所示:
这里写图片描述
这里写图片描述
这里写图片描述

mian.py

# -*- coding:utf-8 -*-# import sysfrom PyQt5.QtWidgets import QApplication , QMainWindowfrom mainfun import *if __name__ == '__main__':    app = QApplication(sys.argv)    mainW = QMainWindow()    ui = myWindows(mainW)    mainW.show()    sys.exit(app.exec_())

界面文件mainwindow3.py

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'main3.ui'## Created by: PyQt5 UI code generator 5.9.1## WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsimport matplotlib.pyplot as plt from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvasclass Ui_MainWindow(object):    def setupUi(self, MainWindow):        MainWindow.setObjectName("MainWindow")        MainWindow.resize(1131, 761)        self.centralwidget = QtWidgets.QWidget(MainWindow)        self.centralwidget.setObjectName("centralwidget")        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)        self.gridLayout.setObjectName("gridLayout")        self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)        self.tabWidget.setObjectName("tabWidget")        self.tab = QtWidgets.QWidget()        self.tab.setObjectName("tab")        self.gridLayout_2 = QtWidgets.QGridLayout(self.tab)        self.gridLayout_2.setObjectName("gridLayout_2")        self.frame = QtWidgets.QFrame(self.tab)        self.frame.setMinimumSize(QtCore.QSize(151, 0))        self.frame.setMaximumSize(QtCore.QSize(151, 16777215))        self.frame.setFrameShape(QtWidgets.QFrame.Box)        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)        self.frame.setObjectName("frame")        self.canny_L2gradient_checkBox = QtWidgets.QCheckBox(self.frame)        self.canny_L2gradient_checkBox.setGeometry(QtCore.QRect(60, 100, 81, 21))        self.canny_L2gradient_checkBox.setObjectName("canny_L2gradient_checkBox")        self.canny_open_pushButton = QtWidgets.QPushButton(self.frame)        self.canny_open_pushButton.setGeometry(QtCore.QRect(60, 140, 75, 23))        self.canny_open_pushButton.setObjectName("canny_open_pushButton")        self.widget = QtWidgets.QWidget(self.frame)        self.widget.setGeometry(QtCore.QRect(10, 30, 122, 56))        self.widget.setObjectName("widget")        self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)        self.verticalLayout.setContentsMargins(0, 0, 0, 0)        self.verticalLayout.setObjectName("verticalLayout")        self.horizontalLayout = QtWidgets.QHBoxLayout()        self.horizontalLayout.setObjectName("horizontalLayout")        self.label = QtWidgets.QLabel(self.widget)        self.label.setMinimumSize(QtCore.QSize(41, 22))        self.label.setMaximumSize(QtCore.QSize(41, 22))        self.label.setObjectName("label")        self.horizontalLayout.addWidget(self.label)        self.canny_min_spinBox = QtWidgets.QSpinBox(self.widget)        self.canny_min_spinBox.setMinimumSize(QtCore.QSize(71, 22))        self.canny_min_spinBox.setMaximumSize(QtCore.QSize(71, 22))        self.canny_min_spinBox.setMaximum(999999999)        self.canny_min_spinBox.setProperty("value", 200)        self.canny_min_spinBox.setObjectName("canny_min_spinBox")        self.horizontalLayout.addWidget(self.canny_min_spinBox)        self.verticalLayout.addLayout(self.horizontalLayout)        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()        self.horizontalLayout_2.setObjectName("horizontalLayout_2")        self.label_2 = QtWidgets.QLabel(self.widget)        self.label_2.setMinimumSize(QtCore.QSize(41, 22))        self.label_2.setMaximumSize(QtCore.QSize(41, 22))        self.label_2.setObjectName("label_2")        self.horizontalLayout_2.addWidget(self.label_2)        self.canny_max_spinBox = QtWidgets.QSpinBox(self.widget)        self.canny_max_spinBox.setMinimumSize(QtCore.QSize(71, 22))        self.canny_max_spinBox.setMaximumSize(QtCore.QSize(71, 22))        self.canny_max_spinBox.setMaximum(999999999)        self.canny_max_spinBox.setProperty("value", 300)        self.canny_max_spinBox.setObjectName("canny_max_spinBox")        self.horizontalLayout_2.addWidget(self.canny_max_spinBox)        self.verticalLayout.addLayout(self.horizontalLayout_2)        self.gridLayout_2.addWidget(self.frame, 0, 0, 1, 1)        self.frame_2 = QtWidgets.QFrame(self.tab)        self.frame_2.setFrameShape(QtWidgets.QFrame.Box)        self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)        self.frame_2.setObjectName("frame_2")        self.gridLayout_3 = QtWidgets.QGridLayout(self.frame_2)        self.gridLayout_3.setObjectName("gridLayout_3")        self.widget1 = QtWidgets.QWidget(self.frame_2)        self.widget1.setObjectName("widget1")        self.gridLayout_8 = QtWidgets.QGridLayout(self.widget1)        self.gridLayout_8.setObjectName("gridLayout_8")        self.canny_figure, self.canny_figaxes = plt.subplots()        self.canny_canvas = FigureCanvas(self.canny_figure)        # self.widget_4 = QtWidgets.QWidget(self.widget1)        # self.widget_4.setObjectName("widget_4")        self.gridLayout_8.addWidget(self.canny_canvas, 0, 0, 1, 1)        self.gridLayout_3.addWidget(self.widget1, 0, 0, 1, 1)        self.gridLayout_2.addWidget(self.frame_2, 0, 1, 1, 1)        self.tabWidget.addTab(self.tab, "")        self.tab_2 = QtWidgets.QWidget()        self.tab_2.setObjectName("tab_2")        self.gridLayout_4 = QtWidgets.QGridLayout(self.tab_2)        self.gridLayout_4.setObjectName("gridLayout_4")        self.frame_3 = QtWidgets.QFrame(self.tab_2)        self.frame_3.setMinimumSize(QtCore.QSize(91, 0))        self.frame_3.setMaximumSize(QtCore.QSize(91, 16777215))        self.frame_3.setFrameShape(QtWidgets.QFrame.Box)        self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)        self.frame_3.setObjectName("frame_3")        self.widget2 = QtWidgets.QWidget(self.frame_3)        self.widget2.setGeometry(QtCore.QRect(10, 20, 77, 112))        self.widget2.setObjectName("widget2")        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget2)        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)        self.verticalLayout_2.setObjectName("verticalLayout_2")        self.jzt_open_pushButton = QtWidgets.QPushButton(self.widget2)        self.jzt_open_pushButton.setObjectName("jzt_open_pushButton")        self.verticalLayout_2.addWidget(self.jzt_open_pushButton)        self.jzt_down_pushButton = QtWidgets.QPushButton(self.widget2)        self.jzt_down_pushButton.setObjectName("jzt_down_pushButton")        self.verticalLayout_2.addWidget(self.jzt_down_pushButton)        self.jzt_up_pushButton = QtWidgets.QPushButton(self.widget2)        self.jzt_up_pushButton.setObjectName("jzt_up_pushButton")        self.verticalLayout_2.addWidget(self.jzt_up_pushButton)        self.jzt_lapulasi_pushButton = QtWidgets.QPushButton(self.widget2)        self.jzt_lapulasi_pushButton.setObjectName("jzt_lapulasi_pushButton")        self.verticalLayout_2.addWidget(self.jzt_lapulasi_pushButton)        self.gridLayout_4.addWidget(self.frame_3, 0, 0, 1, 1)        self.frame_4 = QtWidgets.QFrame(self.tab_2)        self.frame_4.setFrameShape(QtWidgets.QFrame.Box)        self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised)        self.frame_4.setObjectName("frame_4")        self.gridLayout_5 = QtWidgets.QGridLayout(self.frame_4)        self.gridLayout_5.setObjectName("gridLayout_5")        self.jzt_figure, self.jzt_figaxes = plt.subplots()        self.jzt_canvas = FigureCanvas(self.jzt_figure)        # self.widget_2 = QtWidgets.QWidget(self.frame_4)        # self.widget_2.setObjectName("widget_2")        self.gridLayout_5.addWidget(self.jzt_canvas, 0, 0, 1, 1)        self.gridLayout_4.addWidget(self.frame_4, 0, 1, 1, 1)        self.tabWidget.addTab(self.tab_2, "")        self.tab_3 = QtWidgets.QWidget()        self.tab_3.setObjectName("tab_3")        self.gridLayout_6 = QtWidgets.QGridLayout(self.tab_3)        self.gridLayout_6.setObjectName("gridLayout_6")        self.frame_5 = QtWidgets.QFrame(self.tab_3)        self.frame_5.setMinimumSize(QtCore.QSize(261, 0))        self.frame_5.setMaximumSize(QtCore.QSize(261, 16777215))        self.frame_5.setFrameShape(QtWidgets.QFrame.Box)        self.frame_5.setFrameShadow(QtWidgets.QFrame.Raised)        self.frame_5.setObjectName("frame_5")        self.lk_open_pushButton = QtWidgets.QPushButton(self.frame_5)        self.lk_open_pushButton.setGeometry(QtCore.QRect(170, 40, 75, 23))        self.lk_open_pushButton.setObjectName("lk_open_pushButton")        self.lk_getinfo_pushButton = QtWidgets.QPushButton(self.frame_5)        self.lk_getinfo_pushButton.setGeometry(QtCore.QRect(170, 100, 75, 23))        self.lk_getinfo_pushButton.setObjectName("lk_getinfo_pushButton")        self.frame_6 = QtWidgets.QFrame(self.frame_5)        self.frame_6.setGeometry(QtCore.QRect(10, 130, 241, 261))        self.frame_6.setFrameShape(QtWidgets.QFrame.Box)        self.frame_6.setFrameShadow(QtWidgets.QFrame.Raised)        self.frame_6.setObjectName("frame_6")        self.label_6 = QtWidgets.QLabel(self.frame_6)        self.label_6.setGeometry(QtCore.QRect(10, 10, 54, 16))        self.label_6.setFrameShape(QtWidgets.QFrame.NoFrame)        self.label_6.setObjectName("label_6")        self.lk_bianjie_comboBox = QtWidgets.QComboBox(self.frame_6)        self.lk_bianjie_comboBox.setGeometry(QtCore.QRect(20, 230, 91, 22))        self.lk_bianjie_comboBox.setObjectName("lk_bianjie_comboBox")        self.lk_bianjie_comboBox.addItem("")        self.lk_bianjie_comboBox.addItem("")        self.lk_bianjie_comboBox.addItem("")        self.lk_bianjie_comboBox.addItem("")        self.lk_bianjie_comboBox.addItem("")        self.lk_OK_pushButton = QtWidgets.QPushButton(self.frame_6)        self.lk_OK_pushButton.setGeometry(QtCore.QRect(130, 230, 75, 23))        self.lk_OK_pushButton.setObjectName("lk_OK_pushButton")        self.widget3 = QtWidgets.QWidget(self.frame_6)        self.widget3.setGeometry(QtCore.QRect(20, 30, 217, 189))        self.widget3.setObjectName("widget3")        self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.widget3)        self.verticalLayout_6.setContentsMargins(0, 0, 0, 0)        self.verticalLayout_6.setObjectName("verticalLayout_6")        self.verticalLayout_4 = QtWidgets.QVBoxLayout()        self.verticalLayout_4.setObjectName("verticalLayout_4")        self.horizontalLayout_6 = QtWidgets.QHBoxLayout()        self.horizontalLayout_6.setObjectName("horizontalLayout_6")        self.label_7 = QtWidgets.QLabel(self.widget3)        self.label_7.setMinimumSize(QtCore.QSize(54, 20))        self.label_7.setMaximumSize(QtCore.QSize(54, 20))        self.label_7.setFrameShape(QtWidgets.QFrame.NoFrame)        self.label_7.setObjectName("label_7")        self.horizontalLayout_6.addWidget(self.label_7)        self.lk_ju_lineEdit = QtWidgets.QLineEdit(self.widget3)        self.lk_ju_lineEdit.setMinimumSize(QtCore.QSize(151, 20))        self.lk_ju_lineEdit.setMaximumSize(QtCore.QSize(151, 20))        self.lk_ju_lineEdit.setObjectName("lk_ju_lineEdit")        self.horizontalLayout_6.addWidget(self.lk_ju_lineEdit)        self.verticalLayout_4.addLayout(self.horizontalLayout_6)        self.horizontalLayout_7 = QtWidgets.QHBoxLayout()        self.horizontalLayout_7.setObjectName("horizontalLayout_7")        self.label_8 = QtWidgets.QLabel(self.widget3)        self.label_8.setMinimumSize(QtCore.QSize(54, 20))        self.label_8.setMaximumSize(QtCore.QSize(54, 20))        self.label_8.setFrameShape(QtWidgets.QFrame.NoFrame)        self.label_8.setObjectName("label_8")        self.horizontalLayout_7.addWidget(self.label_8)        self.lk_zhongxin_lineEdit = QtWidgets.QLineEdit(self.widget3)        self.lk_zhongxin_lineEdit.setMinimumSize(QtCore.QSize(151, 20))        self.lk_zhongxin_lineEdit.setMaximumSize(QtCore.QSize(151, 20))        self.lk_zhongxin_lineEdit.setObjectName("lk_zhongxin_lineEdit")        self.horizontalLayout_7.addWidget(self.lk_zhongxin_lineEdit)        self.verticalLayout_4.addLayout(self.horizontalLayout_7)        self.horizontalLayout_8 = QtWidgets.QHBoxLayout()        self.horizontalLayout_8.setObjectName("horizontalLayout_8")        self.label_9 = QtWidgets.QLabel(self.widget3)        self.label_9.setMinimumSize(QtCore.QSize(54, 20))        self.label_9.setMaximumSize(QtCore.QSize(54, 20))        self.label_9.setFrameShape(QtWidgets.QFrame.NoFrame)        self.label_9.setObjectName("label_9")        self.horizontalLayout_8.addWidget(self.label_9)        self.lk_area_lineEdit = QtWidgets.QLineEdit(self.widget3)        self.lk_area_lineEdit.setMinimumSize(QtCore.QSize(151, 20))        self.lk_area_lineEdit.setMaximumSize(QtCore.QSize(151, 20))        self.lk_area_lineEdit.setObjectName("lk_area_lineEdit")        self.horizontalLayout_8.addWidget(self.lk_area_lineEdit)        self.verticalLayout_4.addLayout(self.horizontalLayout_8)        self.horizontalLayout_9 = QtWidgets.QHBoxLayout()        self.horizontalLayout_9.setObjectName("horizontalLayout_9")        self.label_10 = QtWidgets.QLabel(self.widget3)        self.label_10.setMinimumSize(QtCore.QSize(54, 20))        self.label_10.setMaximumSize(QtCore.QSize(54, 20))        self.label_10.setFrameShape(QtWidgets.QFrame.NoFrame)        self.label_10.setObjectName("label_10")        self.horizontalLayout_9.addWidget(self.label_10)        self.lk_long_lineEdit = QtWidgets.QLineEdit(self.widget3)        self.lk_long_lineEdit.setMinimumSize(QtCore.QSize(151, 20))        self.lk_long_lineEdit.setMaximumSize(QtCore.QSize(151, 20))        self.lk_long_lineEdit.setObjectName("lk_long_lineEdit")        self.horizontalLayout_9.addWidget(self.lk_long_lineEdit)        self.verticalLayout_4.addLayout(self.horizontalLayout_9)        self.verticalLayout_6.addLayout(self.verticalLayout_4)        self.horizontalLayout_10 = QtWidgets.QHBoxLayout()        self.horizontalLayout_10.setObjectName("horizontalLayout_10")        self.verticalLayout_5 = QtWidgets.QVBoxLayout()        self.verticalLayout_5.setObjectName("verticalLayout_5")        self.lk_tuxing_radioButton = QtWidgets.QRadioButton(self.widget3)        self.lk_tuxing_radioButton.setMinimumSize(QtCore.QSize(54, 21))        self.lk_tuxing_radioButton.setMaximumSize(QtCore.QSize(54, 21))        self.lk_tuxing_radioButton.setObjectName("lk_tuxing_radioButton")        self.verticalLayout_5.addWidget(self.lk_tuxing_radioButton)        self.label_11 = QtWidgets.QLabel(self.widget3)        self.label_11.setMinimumSize(QtCore.QSize(54, 20))        self.label_11.setMaximumSize(QtCore.QSize(54, 20))        self.label_11.setFrameShape(QtWidgets.QFrame.NoFrame)        self.label_11.setObjectName("label_11")        self.verticalLayout_5.addWidget(self.label_11)        self.horizontalLayout_10.addLayout(self.verticalLayout_5)        self.lk_tubao_textEdit = QtWidgets.QTextEdit(self.widget3)        self.lk_tubao_textEdit.setMinimumSize(QtCore.QSize(151, 71))        self.lk_tubao_textEdit.setMaximumSize(QtCore.QSize(151, 71))        self.lk_tubao_textEdit.setObjectName("lk_tubao_textEdit")        self.horizontalLayout_10.addWidget(self.lk_tubao_textEdit)        self.verticalLayout_6.addLayout(self.horizontalLayout_10)        self.frame_7 = QtWidgets.QFrame(self.frame_5)        self.frame_7.setGeometry(QtCore.QRect(10, 400, 241, 251))        self.frame_7.setFrameShape(QtWidgets.QFrame.Box)        self.frame_7.setFrameShadow(QtWidgets.QFrame.Raised)        self.frame_7.setObjectName("frame_7")        self.label_12 = QtWidgets.QLabel(self.frame_7)        self.label_12.setGeometry(QtCore.QRect(10, 10, 54, 16))        self.label_12.setFrameShape(QtWidgets.QFrame.NoFrame)        self.label_12.setObjectName("label_12")        self.lk_xingzhi_textEdit = QtWidgets.QTextEdit(self.frame_7)        self.lk_xingzhi_textEdit.setGeometry(QtCore.QRect(10, 30, 221, 211))        self.lk_xingzhi_textEdit.setObjectName("lk_xingzhi_textEdit")        self.widget4 = QtWidgets.QWidget(self.frame_5)        self.widget4.setGeometry(QtCore.QRect(10, 10, 145, 52))        self.widget4.setObjectName("widget4")        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.widget4)        self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)        self.verticalLayout_3.setObjectName("verticalLayout_3")        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()        self.horizontalLayout_3.setObjectName("horizontalLayout_3")        self.label_3 = QtWidgets.QLabel(self.widget4)        self.label_3.setObjectName("label_3")        self.horizontalLayout_3.addWidget(self.label_3)        self.lk_mode_comboBox = QtWidgets.QComboBox(self.widget4)        self.lk_mode_comboBox.setMinimumSize(QtCore.QSize(75, 20))        self.lk_mode_comboBox.setObjectName("lk_mode_comboBox")        self.lk_mode_comboBox.addItem("")        self.lk_mode_comboBox.addItem("")        self.lk_mode_comboBox.addItem("")        self.lk_mode_comboBox.addItem("")        self.horizontalLayout_3.addWidget(self.lk_mode_comboBox)        self.verticalLayout_3.addLayout(self.horizontalLayout_3)        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()        self.horizontalLayout_4.setObjectName("horizontalLayout_4")        self.label_4 = QtWidgets.QLabel(self.widget4)        self.label_4.setObjectName("label_4")        self.horizontalLayout_4.addWidget(self.label_4)        self.lk_fangf_comboBox = QtWidgets.QComboBox(self.widget4)        self.lk_fangf_comboBox.setMinimumSize(QtCore.QSize(75, 20))        self.lk_fangf_comboBox.setObjectName("lk_fangf_comboBox")        self.lk_fangf_comboBox.addItem("")        self.lk_fangf_comboBox.addItem("")        self.horizontalLayout_4.addWidget(self.lk_fangf_comboBox)        self.verticalLayout_3.addLayout(self.horizontalLayout_4)        self.widget5 = QtWidgets.QWidget(self.frame_5)        self.widget5.setGeometry(QtCore.QRect(10, 100, 143, 22))        self.widget5.setObjectName("widget5")        self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.widget5)        self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)        self.horizontalLayout_5.setObjectName("horizontalLayout_5")        self.label_5 = QtWidgets.QLabel(self.widget5)        self.label_5.setObjectName("label_5")        self.horizontalLayout_5.addWidget(self.label_5)        self.lk_list_comboBox = QtWidgets.QComboBox(self.widget5)        self.lk_list_comboBox.setMinimumSize(QtCore.QSize(75, 20))        self.lk_list_comboBox.setObjectName("lk_list_comboBox")        # self.lk_list_comboBox.addItem("")        # self.lk_list_comboBox.addItem("")        self.horizontalLayout_5.addWidget(self.lk_list_comboBox)        self.gridLayout_6.addWidget(self.frame_5, 0, 0, 1, 1)        self.frame_8 = QtWidgets.QFrame(self.tab_3)        self.frame_8.setFrameShape(QtWidgets.QFrame.Box)        self.frame_8.setFrameShadow(QtWidgets.QFrame.Raised)        self.frame_8.setObjectName("frame_8")        self.gridLayout_7 = QtWidgets.QGridLayout(self.frame_8)        self.gridLayout_7.setObjectName("gridLayout_7")        self.lk_figure, self.lk_figaxes = plt.subplots()        self.lk_canvas = FigureCanvas(self.lk_figure)        # self.widget_3 = QtWidgets.QWidget(self.frame_8)        # self.widget_3.setObjectName("widget_3")        self.gridLayout_7.addWidget(self.lk_canvas, 0, 0, 1, 1)        self.gridLayout_6.addWidget(self.frame_8, 0, 1, 1, 1)        self.tabWidget.addTab(self.tab_3, "")        self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)        MainWindow.setCentralWidget(self.centralwidget)        self.retranslateUi(MainWindow)        self.tabWidget.setCurrentIndex(0)        QtCore.QMetaObject.connectSlotsByName(MainWindow)    def retranslateUi(self, MainWindow):        _translate = QtCore.QCoreApplication.translate        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))        self.canny_L2gradient_checkBox.setText(_translate("MainWindow", "L2gradient"))        self.canny_open_pushButton.setText(_translate("MainWindow", "打开文件"))        self.label.setText(_translate("MainWindow", "<html><head/><body><p align=\"right\">minVal:</p></body></html>"))        self.label_2.setText(_translate("MainWindow", "<html><head/><body><p align=\"right\">maxVal:</p></body></html>"))        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "边缘检测"))        self.jzt_open_pushButton.setText(_translate("MainWindow", "打开文件"))        self.jzt_down_pushButton.setText(_translate("MainWindow", "pyrDown"))        self.jzt_up_pushButton.setText(_translate("MainWindow", "pyrUp"))        self.jzt_lapulasi_pushButton.setText(_translate("MainWindow", "拉普拉斯"))        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "图像金字塔"))        self.lk_open_pushButton.setText(_translate("MainWindow", "打开图像"))        self.lk_getinfo_pushButton.setText(_translate("MainWindow", "获取信息"))        self.label_6.setText(_translate("MainWindow", "<html><head/><body><p>轮廓特征</p></body></html>"))        self.lk_bianjie_comboBox.setItemText(0, _translate("MainWindow", "直边界矩形"))        self.lk_bianjie_comboBox.setItemText(1, _translate("MainWindow", "最小边界矩形"))        self.lk_bianjie_comboBox.setItemText(2, _translate("MainWindow", "外接圆"))        self.lk_bianjie_comboBox.setItemText(3, _translate("MainWindow", "椭圆拟合"))        self.lk_bianjie_comboBox.setItemText(4, _translate("MainWindow", "直线拟合"))        self.lk_OK_pushButton.setText(_translate("MainWindow", "确定"))        self.label_7.setText(_translate("MainWindow", "<html><head/><body><p align=\"right\">矩:</p></body></html>"))        self.label_8.setText(_translate("MainWindow", "<html><head/><body><p align=\"right\">重心:</p></body></html>"))        self.label_9.setText(_translate("MainWindow", "<html><head/><body><p align=\"right\">轮廓面积:</p></body></html>"))        self.label_10.setText(_translate("MainWindow", "<html><head/><body><p align=\"right\">轮廓周长:</p></body></html>"))        self.lk_tuxing_radioButton.setText(_translate("MainWindow", "凸性"))        self.label_11.setText(_translate("MainWindow", "<html><head/><body><p align=\"right\">凸包:</p></body></html>"))        self.label_12.setText(_translate("MainWindow", "<html><head/><body><p>轮廓性质</p></body></html>"))        self.label_3.setText(_translate("MainWindow", "检索模式:"))        self.lk_mode_comboBox.setItemText(0, _translate("MainWindow", "LIST"))        self.lk_mode_comboBox.setItemText(1, _translate("MainWindow", "EXTERNAL"))        self.lk_mode_comboBox.setItemText(2, _translate("MainWindow", "CCOMP"))        self.lk_mode_comboBox.setItemText(3, _translate("MainWindow", "TREE"))        self.label_4.setText(_translate("MainWindow", "近似方法:"))        self.lk_fangf_comboBox.setItemText(0, _translate("MainWindow", "NONE"))        self.lk_fangf_comboBox.setItemText(1, _translate("MainWindow", "SIMPLE"))        self.label_5.setText(_translate("MainWindow", "轮廓列表:"))        # self.lk_list_comboBox.setItemText(0, _translate("MainWindow", "1"))        # self.lk_list_comboBox.setItemText(1, _translate("MainWindow", "2"))        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "图像轮廓"))

逻辑实现代码mainfun.py

from mainwindow3 import Ui_MainWindowfrom PyQt5 import QtWidgetsimport cv2import numpy as npclass myWindows(Ui_MainWindow):    """docstring for myWindows"""    def __init__(self, MainWindow):        super(myWindows, self).__init__()        self.window = Ui_MainWindow()        self.window.setupUi(MainWindow)        self.btn_clicked_connect_fun()        # self.window.Tools_txmode_comboBox.currentTextChanged.connect(self.tools_fun)        # self.tools_fun()    def btn_clicked_connect_fun(self):        self.window.canny_open_pushButton.clicked.connect(self.opencv_canny_fun)        self.window.jzt_up_pushButton.clicked.connect(self.jzt_up_fun)        self.window.jzt_open_pushButton.clicked.connect(self.jzt_open_fun)        self.window.jzt_lapulasi_pushButton.clicked.connect(self.jzt_lapulasi_fun)        self.window.jzt_down_pushButton.clicked.connect(self.jzt_down_fun)        self.window.lk_open_pushButton.clicked.connect(self.lk_open_fun)        self.window.lk_getinfo_pushButton.clicked.connect(self.lk_getinfo_fun)        self.window.lk_OK_pushButton.clicked.connect(self.lk_Ok_fun)    def test(self):        print('-------test--------')    def opencv_canny_fun(self):        fileName = self.open_image_file()        if fileName:            img = cv2.imread(fileName, 0)            minVal = self.window.canny_min_spinBox.value()            maxVal = self.window.canny_max_spinBox.value()            flag_L2gradient = self.window.canny_L2gradient_checkBox.isChecked()            if flag_L2gradient:                ret = cv2.Canny(img, minVal, maxVal, L2gradient=flag_L2gradient)            else:                ret = cv2.Canny(img, minVal, maxVal)            if hasattr(self, "cannyimg"):                self.bhshowopenimg.remove()                del self.bhshowopenimg            self.cannyimg = self.window.canny_figaxes.imshow(ret, cmap="gray")            self.window.canny_figaxes.autoscale_view()            self.window.canny_figure.canvas.draw()    def jzt_open_fun(self):        fileName = self.open_image_file()        if fileName:            self.jzt_img = cv2.imread(fileName)            b, g, r = cv2.split(self.jzt_img)            imgret = cv2.merge([r,g,b])            if hasattr(self, "jztopenimg"):                self.jztopenimg.remove()                del self.jztopenimg            self.jztopenimg = self.window.jzt_figaxes.imshow(imgret)            self.window.jzt_figaxes.autoscale_view()            self.window.jzt_figure.canvas.draw()    def jzt_down_fun(self):        self.jzt_img = cv2.pyrDown(self.jzt_img)        b, g, r = cv2.split(self.jzt_img)        imgret = cv2.merge([r,g,b])        if hasattr(self, "jztopenimg"):            self.jztopenimg.remove()            del self.jztopenimg        self.jztopenimg = self.window.jzt_figaxes.imshow(imgret)        self.window.jzt_figaxes.autoscale_view()        self.window.jzt_figure.canvas.draw()    def jzt_up_fun(self):        self.jzt_img = cv2.pyrUp(self.jzt_img)        b, g, r = cv2.split(self.jzt_img)        imgret = cv2.merge([r,g,b])        if hasattr(self, "jztopenimg"):            self.jztopenimg.remove()            del self.jztopenimg        self.jztopenimg = self.window.jzt_figaxes.imshow(imgret)        self.window.jzt_figaxes.autoscale_view()        self.window.jzt_figure.canvas.draw()    def jzt_lapulasi_fun(self):        print("sorry not this fun")        # G = self.jzt_img.copy()        # gpA = [G]        # for i in range(6):        #     G = cv2.pyrDown(G)        #     gpA.append(G)        # lpA = [gpA[5]]        # for i in range(5, 0, -1):        #     GE = cv2.pyrUp(gpA[i])        #     L = cv2.subtract(gpA[i-1], GE)        #     lpA.append(L)        # # G1 = cv2.pyrDown(self.jzt_img)        # # G2 = cv2.pyrDown(G1)        # # G2 = cv2.pyrUp(G2)        # # L1 = cv2.subtract(G2, G1)        # if hasattr(self, "jztopenimg"):        #     self.jztopenimg.remove()        #     del self.jztopenimg        # self.jztopenimg = self.window.jzt_figaxes.imshow(lpA[0])        # self.window.jzt_figaxes.autoscale_view()        # self.window.jzt_figure.canvas.draw()    def lk_open_fun(self):        fileName = self.open_image_file()        if fileName:            self.ik_img = cv2.imread(fileName)            imgray = cv2.cvtColor(self.ik_img, cv2.COLOR_BGR2GRAY)            ret, thresh = cv2.threshold(imgray, 127, 255,0)            tmp_mode = self.window.lk_mode_comboBox.currentText()            if tmp_mode == "LIST":                cv2_mode = cv2.RETR_LIST            elif tmp_mode == "EXTERNAL":                cv2_mode = cv2.RETR_EXTERNAL             elif tmp_mode == "CCOMP":                cv2_mode = cv2.RETR_CCOMP            else:                cv2_mode = cv2.RETR_TREE            tmp_fangf = self.window.lk_fangf_comboBox.currentText()            if tmp_fangf == "SIMPLE":                cv2_fangf = cv2.CHAIN_APPROX_SIMPLE            else:                cv2_fangf = cv2.CHAIN_APPROX_NONE            image, contours,hierarchy = cv2.findContours(thresh, cv2_mode, cv2_fangf)            self.ik_img = cv2.drawContours(self.ik_img, contours, -1, (255,0,0), 2)            b, g, r = cv2.split(self.ik_img)            imgret = cv2.merge([r,g,b])            if hasattr(self, "jztopenimg"):                self.jztopenimg.remove()                del self.jztopenimg            self.jztopenimg = self.window.lk_figaxes.imshow(imgret)            self.window.lk_figaxes.autoscale_view()            self.window.lk_figure.canvas.draw()            list_item = []            self.mycontours = contours            for i in range(len(contours)):                list_item.append(str(i))            self.window.lk_list_comboBox.addItems(list_item)    def lk_getinfo_fun(self):        if hasattr(self, "mycontours"):            cnt_num = int(self.window.lk_list_comboBox.currentText())            cnts = self.mycontours[cnt_num]            M = cv2.moments(cnts)            # print(M)            self.window.lk_ju_lineEdit.setText(str(M))            Cx = int(M['m10'] / M['m00'])            Cy = int(M['m01'] / M['m00'])            # print(Cx,Cy)            self.window.lk_zhongxin_lineEdit.setText("Cx:%d,Cy:%d" % (Cx, Cy))            area = cv2.contourArea(cnts)            # print(area)            self.window.lk_area_lineEdit.setText(str(area))            perimeter = cv2.arcLength(cnts, True)            # print(perimeter)            self.window.lk_long_lineEdit.setText(str(perimeter))            hull = cv2.convexHull(cnts)            self.window.lk_tubao_textEdit.setText(str(hull))            K = cv2.isContourConvex(cnts)            self.window.lk_tuxing_radioButton.setChecked(K)            print(K)            # print(hull)            #     def lk_Ok_fun(self):        if hasattr(self, "mycontours"):            cnt_num = int(self.window.lk_list_comboBox.currentText())            cnts = self.mycontours[cnt_num]            tmp_tux = self.window.lk_bianjie_comboBox.currentText()            if tmp_tux == "直边界矩形":                x,y,w,h = cv2.boundingRect(cnts)                self.ik_img = cv2.rectangle(self.ik_img, (x,y), (x+w,y+h), (0,0,255), 2)            elif tmp_tux == "最小边界矩形":                rect = cv2.minAreaRect(cnts)                box = cv2.boxPoints(rect)                box = np.int0(box)                self.ik_img = cv2.drawContours(self.ik_img, [box], 0, (0,127,255), 2)            elif tmp_tux == "外接圆":                (x, y), radius = cv2.minEnclosingCircle(cnts)                cennt = (int(x), int(y))                radius = int(radius)                self.ik_img = cv2.circle(self.ik_img, cennt, radius, (9,211,55), 2)            elif tmp_tux == "椭圆拟合":                ellipse = cv2.fitEllipse(cnts)                self.ik_img = cv2.ellipse(self.ik_img, ellipse, (0,157,157), 2)            else:                pass            b, g, r = cv2.split(self.ik_img)            imgret = cv2.merge([r,g,b])            if hasattr(self, "jztopenimg"):                self.jztopenimg.remove()                del self.jztopenimg            self.jztopenimg = self.window.lk_figaxes.imshow(imgret)            self.window.lk_figaxes.autoscale_view()            self.window.lk_figure.canvas.draw()    def open_image_file(self):        '''打开一个图像文件'''        fileName, filetype= QtWidgets.QFileDialog.getOpenFileName(self.window.centralwidget,             "open file", '.', "jpg Files (*.jpg);;png Files (*.png);;All Files (*)")        return fileName

如有疑问请联系,1171119770@qq.com
详细的文档说明: http://download.csdn.net/download/eric_lmy/10135602
打包好的exe文件: http://pan.baidu.com/s/1i4QG11N

原创粉丝点击