PyQt5+OpenCV+Matplotlib 基础操作教程代码

来源:互联网 发布:cla 知乎 编辑:程序博客网 时间:2024/06/01 13:55

由于以前写的基础知识没有配写代码:http://download.csdn.net/download/eric_lmy/10121771
现在讲代码配上:显示效果如下:http://blog.csdn.net/Eric_lmy/article/details/78553354

使用环境是:python3.6 opencv matplotlib pyqt5
也可以使用pyinstaller -F -w main.py 命令打包成ex文件,可以独立运行。(首先安装pyinstaller(本人使用1.0.0版本的))

ui功能和逻辑操作部分功能文件(mainWindow.py):

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'main.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 FigureCanvas from matplotlib.backends.backend_qt5 import NavigationToolbar2QT as NavigationToolbar import cv2import timeimport numpy as np class Ui_MainWindow(object):    def __del__(self):        self.camera.release()# 释放资源        if self.out_release_flag:            self.out.release()    def setupUi(self, MainWindow):        self.recod_flag = False        self.out_release_flag = False        self.snap_flag = False        MainWindow.setObjectName("MainWindow")        MainWindow.resize(1332, 860)        MainWindow.setMinimumSize(QtCore.QSize(1332, 860))        MainWindow.setMaximumSize(QtCore.QSize(1332, 860))        self.centralwidget = QtWidgets.QWidget(MainWindow)        self.centralwidget.setObjectName("centralwidget")        self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)        self.tabWidget.setGeometry(QtCore.QRect(10, 10, 1321, 831))        self.tabWidget.setObjectName("tabWidget")        self.tuXiang = QtWidgets.QWidget()        self.tuXiang.setObjectName("tuXiang")        self.frame = QtWidgets.QFrame(self.tuXiang)        self.frame.setGeometry(QtCore.QRect(0, 0, 991, 801))        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)        sizePolicy.setHorizontalStretch(0)        sizePolicy.setVerticalStretch(0)        sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth())        self.frame.setSizePolicy(sizePolicy)        self.frame.setMinimumSize(QtCore.QSize(991, 801))        self.frame.setMaximumSize(QtCore.QSize(991, 801))        self.frame.setFocusPolicy(QtCore.Qt.NoFocus)        self.frame.setLayoutDirection(QtCore.Qt.RightToLeft)        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)        self.frame.setFrameShadow(QtWidgets.QFrame.Plain)        self.frame.setObjectName("frame")        self.widgetforimage = QtWidgets.QWidget(self.frame)        self.widgetforimage.setGeometry(QtCore.QRect(5, 5, 981, 791))        self.widgetforimage.setObjectName("widgetforimage")        self.verticalLayoutforimage = QtWidgets.QVBoxLayout(self.widgetforimage)        self.verticalLayoutforimage.setContentsMargins(0, 0, 0, 0)        self.verticalLayoutforimage.setObjectName("verticalLayoutforimage")        self.figureforimage, self.figaxesforimage = plt.subplots()        self.figureforimage.subplots_adjust(left=0.055,top=0.99,right=0.98,bottom=0.055)        self.canvasforimage = FigureCanvas(self.figureforimage)        self.toolbarforimage = NavigationToolbar(self.canvasforimage, self.widgetforimage)        self.toolbarforimage.setGeometry(QtCore.QRect(150, 150, 971, 41))        # self.toolbarforimage.setMinimumSize(QtCore.QSize(371, 41))        # self.toolbarforimage.setMaximumSize(QtCore.QSize(371, 41))        self.verticalLayoutforimage.addWidget(self.toolbarforimage)        self.canvasforimage.setMinimumSize(QtCore.QSize(971, 741))        self.canvasforimage.setMaximumSize(QtCore.QSize(971, 741))        self.verticalLayoutforimage.addWidget(self.canvasforimage)        self.frame_RGB = QtWidgets.QFrame(self.tuXiang)        self.frame_RGB.setGeometry(QtCore.QRect(1000, 0, 311, 91))        self.frame_RGB.setFrameShape(QtWidgets.QFrame.StyledPanel)        self.frame_RGB.setFrameShadow(QtWidgets.QFrame.Plain)        self.frame_RGB.setObjectName("frame_RGB")        self.frame_RGB_quyu = QtWidgets.QFrame(self.frame_RGB)        self.frame_RGB_quyu.setGeometry(QtCore.QRect(180, 10, 121, 71))        self.frame_RGB_quyu.setFrameShape(QtWidgets.QFrame.StyledPanel)        self.frame_RGB_quyu.setFrameShadow(QtWidgets.QFrame.Plain)        self.frame_RGB_quyu.setObjectName("frame_RGB_quyu")        self.widgetforquyu = QtWidgets.QWidget(self.frame_RGB_quyu)        self.widgetforquyu.setGeometry(QtCore.QRect(1, 1, 118, 68))        self.widgetforquyu.setObjectName("widgetforquyu")        self.verticalLayoutforquyu = QtWidgets.QVBoxLayout(self.widgetforquyu)        self.verticalLayoutforquyu.setContentsMargins(0, 0, 0, 0)        self.verticalLayoutforquyu.setObjectName("verticalLayoutforquyu")        self.figureforquyu, self.figaxesforquyu = plt.subplots()        self.figureforquyu.subplots_adjust(left=0.01,top=0.99,right=0.99,bottom=0.01)        self.canvasforquyu = FigureCanvas(self.figureforquyu)        self.canvasforquyu.setMinimumSize(QtCore.QSize(118, 68))        self.canvasforquyu.setMaximumSize(QtCore.QSize(118, 68))        # self.canvas.setGeometry(QtCore.QRect(110, 50, 1111, 701))        self.verticalLayoutforquyu.addWidget(self.canvasforquyu)        self.widget = QtWidgets.QWidget(self.frame_RGB)        self.widget.setGeometry(QtCore.QRect(10, 0, 161, 91))        self.widget.setObjectName("widget")        self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.widget)        self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)        self.horizontalLayout_4.setObjectName("horizontalLayout_4")        self.verticalLayout = QtWidgets.QVBoxLayout()        self.verticalLayout.setObjectName("verticalLayout")        self.horizontalLayout = QtWidgets.QHBoxLayout()        self.horizontalLayout.setObjectName("horizontalLayout")        self.label = QtWidgets.QLabel(self.widget)        self.label.setObjectName("label")        self.horizontalLayout.addWidget(self.label)        self.RGB_R_slider = QtWidgets.QSlider(self.widget)        self.RGB_R_slider.setMaximum(255)        self.RGB_R_slider.setPageStep(1)        self.RGB_R_slider.setProperty("value", 255)        self.RGB_R_slider.setOrientation(QtCore.Qt.Horizontal)        self.RGB_R_slider.setObjectName("RGB_R_slider")        self.horizontalLayout.addWidget(self.RGB_R_slider)        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.setObjectName("label_2")        self.horizontalLayout_2.addWidget(self.label_2)        self.RGB_G_slider = QtWidgets.QSlider(self.widget)        self.RGB_G_slider.setMaximum(255)        self.RGB_G_slider.setPageStep(1)        self.RGB_G_slider.setOrientation(QtCore.Qt.Horizontal)        self.RGB_G_slider.setObjectName("RGB_G_slider")        self.horizontalLayout_2.addWidget(self.RGB_G_slider)        self.verticalLayout.addLayout(self.horizontalLayout_2)        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()        self.horizontalLayout_3.setObjectName("horizontalLayout_3")        self.label_3 = QtWidgets.QLabel(self.widget)        self.label_3.setObjectName("label_3")        self.horizontalLayout_3.addWidget(self.label_3)        self.RGB_B_slider = QtWidgets.QSlider(self.widget)        self.RGB_B_slider.setMaximum(255)        self.RGB_B_slider.setPageStep(1)        self.RGB_B_slider.setOrientation(QtCore.Qt.Horizontal)        self.RGB_B_slider.setObjectName("RGB_B_slider")        self.horizontalLayout_3.addWidget(self.RGB_B_slider)        self.verticalLayout.addLayout(self.horizontalLayout_3)        self.horizontalLayout_4.addLayout(self.verticalLayout)        self.verticalLayout_2 = QtWidgets.QVBoxLayout()        self.verticalLayout_2.setObjectName("verticalLayout_2")        self.RGB_R_spinBox = QtWidgets.QSpinBox(self.widget)        self.RGB_R_spinBox.setMaximum(255)        self.RGB_R_spinBox.setProperty("value", 255)        self.RGB_R_spinBox.setObjectName("RGB_R_spinBox")        self.verticalLayout_2.addWidget(self.RGB_R_spinBox)        self.RGB_G_spinBox = QtWidgets.QSpinBox(self.widget)        self.RGB_G_spinBox.setMaximum(255)        self.RGB_G_spinBox.setObjectName("RGB_G_spinBox")        self.verticalLayout_2.addWidget(self.RGB_G_spinBox)        self.RGB_B_spinBox = QtWidgets.QSpinBox(self.widget)        self.RGB_B_spinBox.setMaximum(255)        self.RGB_B_spinBox.setObjectName("RGB_B_spinBox")        self.verticalLayout_2.addWidget(self.RGB_B_spinBox)        self.horizontalLayout_4.addLayout(self.verticalLayout_2)        self.comboBox_type = QtWidgets.QComboBox(self.tuXiang)        self.comboBox_type.setGeometry(QtCore.QRect(1010, 100, 69, 22))        self.comboBox_type.setObjectName("comboBox_type")        self.comboBox_type.addItem("")        self.comboBox_type.addItem("")        self.comboBox_type.addItem("")        self.comboBox_type.addItem("")        self.comboBox_type.addItem("")        self.comboBox_type.addItem("")        self.frame_line_range = QtWidgets.QFrame(self.tuXiang)        self.frame_line_range.setGeometry(QtCore.QRect(1000, 130, 311, 71))        self.frame_line_range.setFrameShape(QtWidgets.QFrame.StyledPanel)        self.frame_line_range.setFrameShadow(QtWidgets.QFrame.Plain)        self.frame_line_range.setObjectName("frame_line_range")        self.widget1 = QtWidgets.QWidget(self.frame_line_range)        self.widget1.setGeometry(QtCore.QRect(20, 10, 216, 52))        self.widget1.setObjectName("widget1")        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.widget1)        self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)        self.verticalLayout_3.setObjectName("verticalLayout_3")        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()        self.horizontalLayout_5.setObjectName("horizontalLayout_5")        self.label_5 = QtWidgets.QLabel(self.widget1)        self.label_5.setObjectName("label_5")        self.horizontalLayout_5.addWidget(self.label_5)        self.line_range_x_start = QtWidgets.QSpinBox(self.widget1)        self.line_range_x_start.setMinimumSize(QtCore.QSize(82, 20))        self.line_range_x_start.setMaximumSize(QtCore.QSize(82, 20))        self.line_range_x_start.setMaximum(999999999)        self.line_range_x_start.setObjectName("line_range_x_start")        self.horizontalLayout_5.addWidget(self.line_range_x_start)        self.line_range_y_start = QtWidgets.QSpinBox(self.widget1)        self.line_range_y_start.setMinimumSize(QtCore.QSize(82, 20))        self.line_range_y_start.setMaximumSize(QtCore.QSize(82, 20))        self.line_range_y_start.setMaximum(999999999)        self.line_range_y_start.setObjectName("line_range_y_start")        self.horizontalLayout_5.addWidget(self.line_range_y_start)        self.verticalLayout_3.addLayout(self.horizontalLayout_5)        self.horizontalLayout_6 = QtWidgets.QHBoxLayout()        self.horizontalLayout_6.setObjectName("horizontalLayout_6")        self.label_6 = QtWidgets.QLabel(self.widget1)        self.label_6.setObjectName("label_6")        self.horizontalLayout_6.addWidget(self.label_6)        self.line_range_x_stop = QtWidgets.QSpinBox(self.widget1)        self.line_range_x_stop.setMinimumSize(QtCore.QSize(82, 20))        self.line_range_x_stop.setMaximumSize(QtCore.QSize(82, 20))        self.line_range_x_stop.setMaximum(999999999)        self.line_range_x_stop.setObjectName("line_range_x_stop")        self.horizontalLayout_6.addWidget(self.line_range_x_stop)        self.line_range_y_stop = QtWidgets.QSpinBox(self.widget1)        self.line_range_y_stop.setMinimumSize(QtCore.QSize(82, 20))        self.line_range_y_stop.setMaximumSize(QtCore.QSize(82, 20))        self.line_range_y_stop.setMaximum(999999999)        self.line_range_y_stop.setObjectName("line_range_y_stop")        self.horizontalLayout_6.addWidget(self.line_range_y_stop)        self.verticalLayout_3.addLayout(self.horizontalLayout_6)        self.spinBox_linetype = QtWidgets.QSpinBox(self.tuXiang)        self.spinBox_linetype.setGeometry(QtCore.QRect(1170, 100, 42, 22))        self.spinBox_linetype.setMinimum(-1)        self.spinBox_linetype.setProperty("value", -1)        self.spinBox_linetype.setObjectName("spinBox_linetype")        self.label_4 = QtWidgets.QLabel(self.tuXiang)        self.label_4.setGeometry(QtCore.QRect(1100, 100, 54, 21))        self.label_4.setObjectName("label_4")        self.frame_tuoyuan = QtWidgets.QFrame(self.tuXiang)        self.frame_tuoyuan.setGeometry(QtCore.QRect(1000, 130, 311, 131))        self.frame_tuoyuan.setFrameShape(QtWidgets.QFrame.StyledPanel)        self.frame_tuoyuan.setFrameShadow(QtWidgets.QFrame.Plain)        self.frame_tuoyuan.setObjectName("frame_tuoyuan")        self.widget2 = QtWidgets.QWidget(self.frame_tuoyuan)        self.widget2.setGeometry(QtCore.QRect(20, 10, 228, 108))        self.widget2.setObjectName("widget2")        self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.widget2)        self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)        self.verticalLayout_4.setObjectName("verticalLayout_4")        self.horizontalLayout_9 = QtWidgets.QHBoxLayout()        self.horizontalLayout_9.setObjectName("horizontalLayout_9")        self.label_11 = QtWidgets.QLabel(self.widget2)        self.label_11.setObjectName("label_11")        self.horizontalLayout_9.addWidget(self.label_11)        self.zhongxindian_x = QtWidgets.QSpinBox(self.widget2)        self.zhongxindian_x.setMinimumSize(QtCore.QSize(82, 20))        self.zhongxindian_x.setMaximumSize(QtCore.QSize(82, 20))        self.zhongxindian_x.setMaximum(999999999)        self.zhongxindian_x.setObjectName("zhongxindian_x")        self.horizontalLayout_9.addWidget(self.zhongxindian_x)        self.zhongxindian_y = QtWidgets.QSpinBox(self.widget2)        self.zhongxindian_y.setMinimumSize(QtCore.QSize(82, 20))        self.zhongxindian_y.setMaximumSize(QtCore.QSize(82, 20))        self.zhongxindian_y.setMaximum(999999999)        self.zhongxindian_y.setObjectName("zhongxindian_y")        self.horizontalLayout_9.addWidget(self.zhongxindian_y)        self.verticalLayout_4.addLayout(self.horizontalLayout_9)        self.horizontalLayout_10 = QtWidgets.QHBoxLayout()        self.horizontalLayout_10.setObjectName("horizontalLayout_10")        self.label_12 = QtWidgets.QLabel(self.widget2)        self.label_12.setObjectName("label_12")        self.horizontalLayout_10.addWidget(self.label_12)        self.changzhou = QtWidgets.QSpinBox(self.widget2)        self.changzhou.setMinimumSize(QtCore.QSize(82, 20))        self.changzhou.setMaximumSize(QtCore.QSize(82, 20))        self.changzhou.setMaximum(999999999)        self.changzhou.setObjectName("changzhou")        self.horizontalLayout_10.addWidget(self.changzhou)        self.duanzhou = QtWidgets.QSpinBox(self.widget2)        self.duanzhou.setMinimumSize(QtCore.QSize(82, 20))        self.duanzhou.setMaximumSize(QtCore.QSize(82, 20))        self.duanzhou.setMaximum(999999999)        self.duanzhou.setObjectName("duanzhou")        self.horizontalLayout_10.addWidget(self.duanzhou)        self.verticalLayout_4.addLayout(self.horizontalLayout_10)        self.horizontalLayout_11 = QtWidgets.QHBoxLayout()        self.horizontalLayout_11.setObjectName("horizontalLayout_11")        self.label_13 = QtWidgets.QLabel(self.widget2)        self.label_13.setObjectName("label_13")        self.horizontalLayout_11.addWidget(self.label_13)        self.jiaodu = QtWidgets.QSpinBox(self.widget2)        self.jiaodu.setMinimumSize(QtCore.QSize(82, 20))        self.jiaodu.setMaximumSize(QtCore.QSize(82, 20))        self.jiaodu.setMaximum(360)        self.jiaodu.setObjectName("jiaodu")        self.horizontalLayout_11.addWidget(self.jiaodu)        self.verticalLayout_4.addLayout(self.horizontalLayout_11)        self.horizontalLayout_12 = QtWidgets.QHBoxLayout()        self.horizontalLayout_12.setObjectName("horizontalLayout_12")        self.label_14 = QtWidgets.QLabel(self.widget2)        self.label_14.setObjectName("label_14")        self.horizontalLayout_12.addWidget(self.label_14)        self.jiaodu_start = QtWidgets.QSpinBox(self.widget2)        self.jiaodu_start.setMinimumSize(QtCore.QSize(82, 20))        self.jiaodu_start.setMaximumSize(QtCore.QSize(82, 20))        self.jiaodu_start.setMaximum(360)        self.jiaodu_start.setObjectName("jiaodu_start")        self.horizontalLayout_12.addWidget(self.jiaodu_start)        self.jiaodu_end = QtWidgets.QSpinBox(self.widget2)        self.jiaodu_end.setMinimumSize(QtCore.QSize(82, 20))        self.jiaodu_end.setMaximumSize(QtCore.QSize(82, 20))        self.jiaodu_end.setMaximum(360)        self.jiaodu_end.setObjectName("jiaodu_end")        self.horizontalLayout_12.addWidget(self.jiaodu_end)        self.verticalLayout_4.addLayout(self.horizontalLayout_12)        self.frame_jinben = QtWidgets.QFrame(self.tuXiang)        self.frame_jinben.setGeometry(QtCore.QRect(1000, 310, 311, 491))        self.frame_jinben.setFrameShape(QtWidgets.QFrame.StyledPanel)        self.frame_jinben.setFrameShadow(QtWidgets.QFrame.Plain)        self.frame_jinben.setObjectName("frame_jinben")        self.openimageBtn = QtWidgets.QPushButton(self.frame_jinben)        self.openimageBtn.setGeometry(QtCore.QRect(10, 180, 75, 23))        self.openimageBtn.setObjectName("openimageBtn")        self.openimageBtn.clicked.connect(self.openimage)        self.saveimageBtn = QtWidgets.QPushButton(self.frame_jinben)        self.saveimageBtn.setGeometry(QtCore.QRect(90, 180, 75, 23))        self.saveimageBtn.setObjectName("saveimageBtn")        self.saveimageBtn.clicked.connect(self.saveimage)        self.kuobian_type = QtWidgets.QComboBox(self.frame_jinben)        self.kuobian_type.setGeometry(QtCore.QRect(130, 80, 81, 22))        self.kuobian_type.setObjectName("kuobian_type")        self.kuobian_type.addItem("")        self.kuobian_type.addItem("")        self.kuobian_type.addItem("")        self.kuobian_type.addItem("")        self.kuobian_type.addItem("")        self.kuobian_type.addItem("")        self.getSX_Btn = QtWidgets.QPushButton(self.frame_jinben)        self.getSX_Btn.setGeometry(QtCore.QRect(130, 40, 75, 23))        self.getSX_Btn.setObjectName("getSX_Btn")        self.getSX_Btn.clicked.connect(self.get_image_info)        self.xiugei_Btn = QtWidgets.QPushButton(self.frame_jinben)        self.xiugei_Btn.setGeometry(QtCore.QRect(210, 40, 75, 23))        self.xiugei_Btn.setObjectName("xiugei_Btn")        self.xiugei_Btn.clicked.connect(self.set_xy_value)        self.shuxing_Edit = QtWidgets.QPlainTextEdit(self.frame_jinben)        self.shuxing_Edit.setGeometry(QtCore.QRect(10, 40, 121, 71))        self.shuxing_Edit.setObjectName("shuxing_Edit")        self.kuobian_Btn = QtWidgets.QPushButton(self.frame_jinben)        self.kuobian_Btn.setGeometry(QtCore.QRect(220, 80, 61, 23))        self.kuobian_Btn.setObjectName("kuobian_Btn")        self.kuobian_Btn.clicked.connect(self.kuobian_fun)        self.image_add_btn = QtWidgets.QPushButton(self.frame_jinben)        self.image_add_btn.setGeometry(QtCore.QRect(10, 140, 75, 23))        self.image_add_btn.setObjectName("image_add_btn")        self.image_add2_btn = QtWidgets.QPushButton(self.frame_jinben)        self.image_add2_btn.setGeometry(QtCore.QRect(90, 140, 75, 23))        self.image_add2_btn.setObjectName("image_add2_btn")        self.add2_quanzhong = QtWidgets.QDoubleSpinBox(self.frame_jinben)        self.add2_quanzhong.setGeometry(QtCore.QRect(170, 140, 62, 22))        self.add2_quanzhong.setMaximum(1.0)        self.add2_quanzhong.setSingleStep(0.01)        self.add2_quanzhong.setProperty("value", 0.5)        self.add2_quanzhong.setObjectName("add2_quanzhong")        self.widget3 = QtWidgets.QWidget(self.frame_jinben)        self.widget3.setGeometry(QtCore.QRect(10, 10, 276, 22))        self.widget3.setObjectName("widget3")        self.horizontalLayout_13 = QtWidgets.QHBoxLayout(self.widget3)        self.horizontalLayout_13.setContentsMargins(0, 0, 0, 0)        self.horizontalLayout_13.setObjectName("horizontalLayout_13")        self.spinBox_hang = QtWidgets.QSpinBox(self.widget3)        self.spinBox_hang.setMinimumSize(QtCore.QSize(60, 20))        self.spinBox_hang.setMaximumSize(QtCore.QSize(60, 20))        self.spinBox_hang.setMaximum(999999999)        self.spinBox_hang.setObjectName("spinBox_hang")        self.horizontalLayout_13.addWidget(self.spinBox_hang)        self.spinBox_lie = QtWidgets.QSpinBox(self.widget3)        self.spinBox_lie.setMinimumSize(QtCore.QSize(60, 20))        self.spinBox_lie.setMaximumSize(QtCore.QSize(60, 20))        self.spinBox_lie.setMaximum(999999999)        self.spinBox_lie.setObjectName("spinBox_lie")        self.horizontalLayout_13.addWidget(self.spinBox_lie)        self.lineEdit_xiangsuzhi = QtWidgets.QLineEdit(self.widget3)        self.lineEdit_xiangsuzhi.setMinimumSize(QtCore.QSize(142, 20))        self.lineEdit_xiangsuzhi.setMaximumSize(QtCore.QSize(142, 20))        self.lineEdit_xiangsuzhi.setObjectName("lineEdit_xiangsuzhi")        self.horizontalLayout_13.addWidget(self.lineEdit_xiangsuzhi)        self.frame_yuan = QtWidgets.QFrame(self.tuXiang)        self.frame_yuan.setGeometry(QtCore.QRect(1000, 130, 311, 71))        self.frame_yuan.setFrameShape(QtWidgets.QFrame.StyledPanel)        self.frame_yuan.setFrameShadow(QtWidgets.QFrame.Plain)        self.frame_yuan.setObjectName("frame_yuan")        self.widget4 = QtWidgets.QWidget(self.frame_yuan)        self.widget4.setGeometry(QtCore.QRect(22, 12, 214, 22))        self.widget4.setObjectName("widget4")        self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.widget4)        self.horizontalLayout_7.setContentsMargins(0, 0, 0, 0)        self.horizontalLayout_7.setObjectName("horizontalLayout_7")        self.label_9 = QtWidgets.QLabel(self.widget4)        self.label_9.setObjectName("label_9")        self.horizontalLayout_7.addWidget(self.label_9)        self.yuanxin_x = QtWidgets.QSpinBox(self.widget4)        self.yuanxin_x.setMinimumSize(QtCore.QSize(82, 20))        self.yuanxin_x.setMaximumSize(QtCore.QSize(82, 20))        self.yuanxin_x.setMaximum(999999999)        self.yuanxin_x.setObjectName("yuanxin_x")        self.horizontalLayout_7.addWidget(self.yuanxin_x)        self.yuanxin_y = QtWidgets.QSpinBox(self.widget4)        self.yuanxin_y.setMinimumSize(QtCore.QSize(82, 20))        self.yuanxin_y.setMaximumSize(QtCore.QSize(82, 20))        self.yuanxin_y.setMaximum(999999999)        self.yuanxin_y.setObjectName("yuanxin_y")        self.horizontalLayout_7.addWidget(self.yuanxin_y)        self.widget5 = QtWidgets.QWidget(self.frame_yuan)        self.widget5.setGeometry(QtCore.QRect(22, 40, 126, 22))        self.widget5.setObjectName("widget5")        self.horizontalLayout_8 = QtWidgets.QHBoxLayout(self.widget5)        self.horizontalLayout_8.setContentsMargins(0, 0, 0, 0)        self.horizontalLayout_8.setObjectName("horizontalLayout_8")        self.label_10 = QtWidgets.QLabel(self.widget5)        self.label_10.setObjectName("label_10")        self.horizontalLayout_8.addWidget(self.label_10)        self.yuan_banjing = QtWidgets.QSpinBox(self.widget5)        self.yuan_banjing.setMinimumSize(QtCore.QSize(82, 20))        self.yuan_banjing.setMaximumSize(QtCore.QSize(82, 20))        self.yuan_banjing.setMaximum(999999999)        self.yuan_banjing.setObjectName("yuan_banjing")        self.horizontalLayout_8.addWidget(self.yuan_banjing)        self.frame_wenzi = QtWidgets.QFrame(self.tuXiang)        self.frame_wenzi.setGeometry(QtCore.QRect(1000, 130, 311, 171))        self.frame_wenzi.setFrameShape(QtWidgets.QFrame.StyledPanel)        self.frame_wenzi.setFrameShadow(QtWidgets.QFrame.Plain)        self.frame_wenzi.setObjectName("frame_wenzi")        self.label_7 = QtWidgets.QLabel(self.frame_wenzi)        self.label_7.setGeometry(QtCore.QRect(20, 20, 41, 21))        self.label_7.setObjectName("label_7")        self.putText = QtWidgets.QLineEdit("HELLO", self.frame_wenzi)        self.putText.setGeometry(QtCore.QRect(60, 20, 191, 20))        self.putText.setObjectName("putText")        self.label_8 = QtWidgets.QLabel(self.frame_wenzi)        self.label_8.setGeometry(QtCore.QRect(20, 80, 41, 21))        self.label_8.setObjectName("label_8")        self.putText_ziti = QtWidgets.QComboBox(self.frame_wenzi)        self.putText_ziti.setGeometry(QtCore.QRect(60, 80, 161, 22))        self.putText_ziti.setObjectName("putText_ziti")        self.putText_ziti.addItem("")        self.putText_ziti.addItem("")        self.putText_ziti.addItem("")        self.putText_ziti.addItem("")        self.putText_ziti.addItem("")        self.putText_ziti.addItem("")        self.label_16 = QtWidgets.QLabel(self.frame_wenzi)        self.label_16.setGeometry(QtCore.QRect(20, 110, 41, 21))        self.label_16.setObjectName("label_16")        self.putText_daxiao = QtWidgets.QSpinBox(self.frame_wenzi)        self.putText_daxiao.setGeometry(QtCore.QRect(60, 110, 82, 20))        self.putText_daxiao.setMinimumSize(QtCore.QSize(82, 20))        self.putText_daxiao.setMaximumSize(QtCore.QSize(82, 20))        self.putText_daxiao.setMaximum(999999999)        self.putText_daxiao.setObjectName("putText_daxiao")        self.label_17 = QtWidgets.QLabel(self.frame_wenzi)        self.label_17.setGeometry(QtCore.QRect(20, 140, 61, 21))        self.label_17.setObjectName("label_17")        self.putText_type = QtWidgets.QComboBox(self.frame_wenzi)        self.putText_type.setGeometry(QtCore.QRect(90, 140, 101, 22))        self.putText_type.setObjectName("putText_type")        self.putText_type.addItem("")        self.putText_type.addItem("")        self.putText_type.addItem("")        self.label_15 = QtWidgets.QLabel(self.frame_wenzi)        self.label_15.setGeometry(QtCore.QRect(20, 50, 41, 21))        self.label_15.setObjectName("label_15")        self.putText_x = QtWidgets.QSpinBox(self.frame_wenzi)        self.putText_x.setGeometry(QtCore.QRect(60, 50, 82, 20))        self.putText_x.setMinimumSize(QtCore.QSize(82, 20))        self.putText_x.setMaximumSize(QtCore.QSize(82, 20))        self.putText_x.setMaximum(999999999)        self.putText_x.setObjectName("putText_x")        self.putText_y = QtWidgets.QSpinBox(self.frame_wenzi)        self.putText_y.setGeometry(QtCore.QRect(140, 50, 82, 20))        self.putText_y.setMinimumSize(QtCore.QSize(82, 20))        self.putText_y.setMaximumSize(QtCore.QSize(82, 20))        self.putText_y.setMaximum(999999999)        self.putText_y.setObjectName("putText_y")        self.OK_Btn = QtWidgets.QPushButton(self.tuXiang)        self.OK_Btn.setGeometry(QtCore.QRect(1230, 100, 75, 23))        self.OK_Btn.setObjectName("OK_Btn")        self.OK_Btn.clicked.connect(self.draw_lines_fun)        self.tabWidget.addTab(self.tuXiang, "")        self.shiPin = QtWidgets.QWidget()        self.shiPin.setObjectName("shiPin")        self.frame_4 = QtWidgets.QFrame(self.shiPin)        self.frame_4.setGeometry(QtCore.QRect(20, 20, 991, 721))        self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel)        self.frame_4.setFrameShadow(QtWidgets.QFrame.Plain)        self.frame_4.setObjectName("frame_4")        self.widget_for_ship = QtWidgets.QWidget(self.frame_4)        self.widget_for_ship.setGeometry(QtCore.QRect(10, 10, 1113, 720))        self.widget_for_ship.setObjectName("widget_for_ship")        self.verticalLayoutforship = QtWidgets.QVBoxLayout(self.widget_for_ship)        self.verticalLayoutforship.setContentsMargins(0, 0, 0, 0)        self.verticalLayoutforship.setObjectName("verticalLayoutforship")        self.figureforship, self.figaxesforship = plt.subplots()        self.canvasforship = FigureCanvas(self.figureforship)        self.canvasforship.setGeometry(QtCore.QRect(10, 10, 971, 701))        self.canvasforship.setMinimumSize(QtCore.QSize(971, 701))        self.canvasforship.setMaximumSize(QtCore.QSize(971, 701))        self.verticalLayoutforship.addWidget(self.canvasforship)        self.shipin_start_btn = QtWidgets.QPushButton(self.shiPin)        self.shipin_start_btn.setGeometry(QtCore.QRect(80, 760, 75, 23))        self.shipin_start_btn.setObjectName("shipin_start_btn")        self.shipin_start_btn.clicked.connect(self.timer_start)        self.shipin_stop_btn = QtWidgets.QPushButton(self.shiPin)        self.shipin_stop_btn.setGeometry(QtCore.QRect(190, 760, 75, 23))        self.shipin_stop_btn.setObjectName("shipin_stop_btn")        self.shipin_stop_btn.clicked.connect(self.timer_stop)        self.shipin_lvzhi_btn = QtWidgets.QPushButton(self.shiPin)        self.shipin_lvzhi_btn.setGeometry(QtCore.QRect(300, 760, 75, 23))        self.shipin_lvzhi_btn.setObjectName("shipin_lvzhi_btn")        self.shipin_lvzhi_btn.clicked.connect(self.recod_image)        self.shipin_pai_btn = QtWidgets.QPushButton(self.shiPin)        self.shipin_pai_btn.setGeometry(QtCore.QRect(410, 760, 75, 23))        self.shipin_pai_btn.setObjectName("shipin_pai_btn")        self.shipin_pai_btn.clicked.connect(self.snap_image)        self.shiPinBtn = QtWidgets.QComboBox(self.shiPin)        self.shiPinBtn.setGeometry(QtCore.QRect(520, 760, 75, 23))        self.shiPinBtn.addItem("摄像头")        self.shiPinBtn.addItem("视频文件")        self.tabWidget.addTab(self.shiPin, "")        self.Test = QtWidgets.QWidget()        self.Test.setObjectName("Test")        self.tabWidget.addTab(self.Test, "")        MainWindow.setCentralWidget(self.centralwidget)        self.retranslateUi(MainWindow)        self.tabWidget.setCurrentIndex(0)        self.RGB_R_slider.valueChanged['int'].connect(self.RGB_R_spinBox.setValue)        self.RGB_R_spinBox.valueChanged['int'].connect(self.RGB_R_slider.setValue)        self.RGB_G_slider.valueChanged['int'].connect(self.RGB_G_spinBox.setValue)        self.RGB_G_spinBox.valueChanged['int'].connect(self.RGB_G_slider.setValue)        self.RGB_B_slider.valueChanged['int'].connect(self.RGB_B_spinBox.setValue)        self.RGB_B_spinBox.valueChanged['int'].connect(self.RGB_B_slider.setValue)        self.RGB_R_slider.valueChanged['int'].connect(self.color_board)        self.RGB_G_slider.valueChanged['int'].connect(self.color_board)        self.RGB_B_slider.valueChanged['int'].connect(self.color_board)        self.comboBox_type.currentIndexChanged.connect(self.showandhideframe)        QtCore.QMetaObject.connectSlotsByName(MainWindow)        self.frame_line_range.show()        self.frame_yuan.hide()        self.frame_tuoyuan.hide()        self.frame_wenzi.hide()        # self.test_image()        self.color_board()        self.timer = QtCore.QTimer()        self.timer.timeout.connect(self.timer_fun) #计时结束调用方法        # self.get_camera()    def retranslateUi(self, MainWindow):        _translate = QtCore.QCoreApplication.translate        MainWindow.setWindowTitle(_translate("MainWindow", "OpenCV+matplotlib"))        self.label.setText(_translate("MainWindow", "R:"))        self.label_2.setText(_translate("MainWindow", "G:"))        self.label_3.setText(_translate("MainWindow", "B:"))        self.comboBox_type.setItemText(0, _translate("MainWindow", "直线"))        self.comboBox_type.setItemText(1, _translate("MainWindow", "矩形"))        self.comboBox_type.setItemText(2, _translate("MainWindow", "圆"))        self.comboBox_type.setItemText(3, _translate("MainWindow", "椭圆"))        self.comboBox_type.setItemText(4, _translate("MainWindow", "多边形"))        self.comboBox_type.setItemText(5, _translate("MainWindow", "文字"))        self.label_5.setText(_translate("MainWindow", "起点:"))        self.label_6.setText(_translate("MainWindow", "终点:"))        self.label_4.setText(_translate("MainWindow", "线条类型:"))        self.label_11.setText(_translate("MainWindow", "中心点:"))        self.label_12.setText(_translate("MainWindow", "长短轴:"))        self.label_13.setText(_translate("MainWindow", "旋转角:"))        self.label_14.setText(_translate("MainWindow", "始终角:"))        self.openimageBtn.setText(_translate("MainWindow", "打开图像"))        self.saveimageBtn.setText(_translate("MainWindow", "保存图像"))        self.kuobian_type.setItemText(0, _translate("MainWindow", "CONSTANT"))        self.kuobian_type.setItemText(1, _translate("MainWindow", "REFLECT"))        self.kuobian_type.setItemText(2, _translate("MainWindow", "REFLECT_101"))        self.kuobian_type.setItemText(3, _translate("MainWindow", "DEFAULT"))        self.kuobian_type.setItemText(4, _translate("MainWindow", "REPLICATE"))        self.kuobian_type.setItemText(5, _translate("MainWindow", "WRAP"))        self.getSX_Btn.setText(_translate("MainWindow", "获取属性值"))        self.xiugei_Btn.setText(_translate("MainWindow", "修改像素值"))        self.shuxing_Edit.setPlainText(_translate("MainWindow", "行:0   列:0  \n""通道:0  \n""像素数:0\n""数据类型:None"))        self.kuobian_Btn.setText(_translate("MainWindow", "扩边"))        self.image_add_btn.setText(_translate("MainWindow", "相加"))        self.image_add2_btn.setText(_translate("MainWindow", "混合"))        self.label_9.setText(_translate("MainWindow", "圆点:"))        self.label_10.setText(_translate("MainWindow", "半径:"))        self.label_7.setText(_translate("MainWindow", "文字:"))        self.label_8.setText(_translate("MainWindow", "字体:"))        self.putText_ziti.setItemText(0, _translate("MainWindow", "FONT_HERSHEY_SIMPLEX"))        self.putText_ziti.setItemText(1, _translate("MainWindow", "FONT_HERSHEY_COMPLEX"))        self.putText_ziti.setItemText(2, _translate("MainWindow", "FONT_HERSHEY_COMPLEX_SMALL"))        self.putText_ziti.setItemText(3, _translate("MainWindow", "FONT_HERSHEY_DUPLEX"))        self.putText_ziti.setItemText(4, _translate("MainWindow", "FONT_HERSHEY_PLAIN"))        self.putText_ziti.setItemText(5, _translate("MainWindow", "FONT_HERSHEY_TRIPLEX"))        self.label_16.setText(_translate("MainWindow", "大小:"))        self.label_17.setText(_translate("MainWindow", "线条类型:"))        self.putText_type.setItemText(0, _translate("MainWindow", "LINE_AA"))        self.putText_type.setItemText(1, _translate("MainWindow", "LINE_8"))        self.putText_type.setItemText(2, _translate("MainWindow", "LINE_4"))        self.label_15.setText(_translate("MainWindow", "位置:"))        self.OK_Btn.setText(_translate("MainWindow", "确定"))        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tuXiang), _translate("MainWindow", "图像"))        self.shipin_start_btn.setText(_translate("MainWindow", "开始"))        self.shipin_stop_btn.setText(_translate("MainWindow", "暂停"))        self.shipin_lvzhi_btn.setText(_translate("MainWindow", "录制"))        self.shipin_pai_btn.setText(_translate("MainWindow", "抓拍"))        self.tabWidget.setTabText(self.tabWidget.indexOf(self.shiPin), _translate("MainWindow", "视频"))        self.tabWidget.setTabText(self.tabWidget.indexOf(self.Test), _translate("MainWindow", "测试"))    def showandhideframe(self):        if self.comboBox_type.currentText() == "直线":            self.frame_line_range.show()            self.frame_yuan.hide()            self.frame_tuoyuan.hide()            self.frame_wenzi.hide()            # print(self.comboBox_type.currentText())        elif self.comboBox_type.currentText() == "矩形":            self.frame_line_range.show()            self.frame_yuan.hide()            self.frame_tuoyuan.hide()            self.frame_wenzi.hide()        elif self.comboBox_type.currentText() == "圆":            self.frame_line_range.hide()            self.frame_yuan.show()            self.frame_tuoyuan.hide()            self.frame_wenzi.hide()        elif self.comboBox_type.currentText() == "椭圆":            self.frame_line_range.hide()            self.frame_yuan.hide()            self.frame_tuoyuan.show()            self.frame_wenzi.hide()        elif self.comboBox_type.currentText() == "文字":            self.frame_line_range.hide()            self.frame_yuan.hide()            self.frame_tuoyuan.hide()            self.frame_wenzi.show()        else:            # print(self.comboBox_type.currentText())            self.frame_line_range.hide()            self.frame_yuan.hide()            self.frame_tuoyuan.hide()            self.frame_wenzi.hide()    def color_board(self):        '''配色板'''        img = np.zeros((68,118,3), np.uint8)        r = self.RGB_R_slider.value()        g = self.RGB_G_slider.value()        b = self.RGB_B_slider.value()        img[:] = [r,g,b]        if hasattr(self, "showcolor"):            self.showcolor.remove()        self.showcolor = self.figaxesforquyu.imshow(img)        self.figaxesforquyu.autoscale_view()        self.figureforquyu.canvas.draw()    def openimage(self):        '''打开一个图像'''        fileName, filetype= QtWidgets.QFileDialog.getOpenFileName(self.centralwidget,             "open file", '.', "jpg Files (*.jpg);;png Files (*.png);;All Files (*)")        if fileName:            self.openimg = cv2.imread(fileName)            b, g, r = cv2.split(self.openimg)            self.openimg2 = cv2.merge([r,g,b])# opencv和matplotlib的图像rgb顺序不一样            # self.openimg2 = self.openimg[:,:,0]# opencv和matplotlib的图像rgb顺序不一样            # 注意如果图像是单通道的就不需要在转换了            if hasattr(self, "showopenimg"):                self.showopenimg.remove()            self.showopenimg = self.figaxesforimage.imshow(self.openimg2)            self.figaxesforimage.autoscale_view()            self.figureforimage.canvas.draw()    def saveimage(self):        '''保存图像'''        fileName, filetype = QtWidgets.QFileDialog.getSaveFileName(self.centralwidget,             "save file", '.', "jpg Files (*.jpg);;png Files (*.png);;All Files (*)")        if fileName:            if hasattr(self, "openimg2"):                b, g, r = cv2.split(self.openimg2)                tmp_img = cv2.merge([r,g,b])                cv2.imwrite(fileName, tmp_img)    def get_image_info(self):        '''获取图像属性,前提是已经打开图像'''        if hasattr(self, "openimg2"):            tmp_shape = self.openimg2.shape             tmp_size = self.openimg2.size              tmp_dtype = self.openimg2.dtype            info = "行:%d  列:%d\n通道:%d\n像素数:%d\n数据类型:%s" %(tmp_shape[0],tmp_shape[1],tmp_shape[2],                tmp_size, tmp_dtype)            # xxx = "行:0  列:0\n""通道:0  \n""像素数:0\n""数据类型:None"            self.shuxing_Edit.setPlainText(info)            # print(info)            y = self.spinBox_hang.value()            x = self.spinBox_lie.value()            tmp_xy = self.openimg2[x,y]#(b,g,r)            xy_info = "R:%d,G:%d,B:%d" % (tmp_xy[0],tmp_xy[1],tmp_xy[2])            # print(tmp_xy)            self.lineEdit_xiangsuzhi.setText(xy_info)        else:            pass    def set_xy_value(self):        '''修改像素值'''        tmp_value = self.lineEdit_xiangsuzhi.text()        print(tmp_value)        tmp_list = []        for rgb in tmp_value.split(','):            tmp_list.append(int(rgb.split(':')[1]))        print(tmp_list)        if hasattr(self, "openimg2"):            y = self.spinBox_hang.value()            x = self.spinBox_lie.value()            self.openimg2[x,y] = tmp_list            if hasattr(self, "showopenimg"):                self.showopenimg.remove()            self.showopenimg = self.figaxesforimage.imshow(self.openimg2)            self.figaxesforimage.autoscale_view()            self.figureforimage.canvas.draw()    def kuobian_fun(self):        '''扩边功能函数'''        BLUE=[48,153,89]        type_bian = self.kuobian_type.currentText()        if hasattr(self, "openimg2"):            if type_bian == "CONSTANT":                tmp_img= cv2.copyMakeBorder(self.openimg2,10,20,30,40,cv2.BORDER_CONSTANT,value=BLUE)            elif type_bian == "REFLECT":                tmp_img = cv2.copyMakeBorder(self.openimg2,40,30,20,10,cv2.BORDER_REFLECT)            elif type_bian == "REFLECT_101":                tmp_img = cv2.copyMakeBorder(self.openimg2,20,10,40,30,cv2.BORDER_REFLECT_101)            elif type_bian == "WRAP":                tmp_img = cv2.copyMakeBorder(self.openimg2,30,40,10,20,cv2.BORDER_WRAP)            elif type_bian == "REPLICATE":                tmp_img = cv2.copyMakeBorder(self.openimg2,10,40,20,30,cv2.BORDER_REFLECT)            elif type_bian == "DEFAULT":                tmp_img = cv2.copyMakeBorder(self.openimg2,30,10,40,20,cv2.BORDER_DEFAULT)            if hasattr(self, "showopenimg"):                self.showopenimg.remove()            self.openimg2 = tmp_img            self.showopenimg = self.figaxesforimage.imshow(self.openimg2)            self.figaxesforimage.autoscale_view()            self.figureforimage.canvas.draw()    def draw_lines_fun(self):        '''画图形函数'''        r = self.RGB_R_spinBox.value()        g = self.RGB_G_spinBox.value()        b = self.RGB_B_spinBox.value()        lines_type = self.spinBox_linetype.value()        if lines_type == 0:            lines_type = -1        type_lines = self.comboBox_type.currentText()        if type_lines == "直线" or type_lines == "矩形":            x0 = self.line_range_x_start.value()            y0 = self.line_range_y_start.value()            x1 = self.line_range_x_stop.value()            y1 = self.line_range_y_stop.value()            if hasattr(self, "openimg2"):                if type_lines == "直线":                    if lines_type == -1:                        lines_type = 1                    cv2.line(self.openimg2, (x0,y0), (x1,y1), (r,g,b), lines_type)                else:                    cv2.rectangle(self.openimg2, (x0,y0), (x1,y1), (r,g,b), lines_type)        elif type_lines == "圆":            x0 = self.yuanxin_x.value()            y0 = self.yuanxin_y.value()            banjing = self.yuan_banjing.value()            cv2.circle(self.openimg2, (x0,y0), banjing, (r,g,b), lines_type)        elif type_lines == "椭圆":            x0 = self.zhongxindian_x.value()            y0 = self.zhongxindian_y.value()            chang = self.changzhou.value()            duan = self.duanzhou.value()            jiao = self.jiaodu.value()            jiao_start = self.jiaodu_start.value()            jiao_end = self.jiaodu_end.value()            cv2.ellipse(self.openimg2, (x0,y0), (chang, duan), jiao, jiao_start, jiao_end, (r,g,b), lines_type)        elif type_lines == "文字":            wenzi = self.putText.text()            x0 = self.putText_x.value()            y0 = self.putText_y.value()            font_type = self.putText_ziti.currentText()            if font_type == "FONT_HERSHEY_TRIPLEX":                font = cv2.FONT_HERSHEY_TRIPLEX            elif font_type == "FONT_HERSHEY_PLAIN":                font = cv2.FONT_HERSHEY_PLAIN            elif font_type == "FONT_HERSHEY_DUPLEX":                font = cv2.FONT_HERSHEY_DUPLEX            elif font_type == "FONT_HERSHEY_COMPLEX":                font = cv2.FONT_HERSHEY_COMPLEX            elif font_type == "FONT_HERSHEY_SIMPLEX":                font = cv2.FONT_HERSHEY_SIMPLEX            elif font_type == "FONT_HERSHEY_COMPLEX_SMALL":                font = cv2.FONT_HERSHEY_COMPLEX_SMALL            wenzi_size = self.putText_daxiao.value()            wenzi_type = self.putText_type.currentText()            if wenzi_type == "LINE_AA":                ziti_type = cv2.LINE_AA            elif wenzi_type == "LINE_8":                ziti_type = cv2.LINE_8            elif wenzi_type == "LINE_4":                ziti_type = cv2.LINE_4            cv2.putText(self.openimg2, wenzi, (x0,y0), font, wenzi_size, (b,g,r), ziti_type)        else:            pass        if hasattr(self, "showopenimg"):                self.showopenimg.remove()        self.showopenimg = self.figaxesforimage.imshow(self.openimg2)        self.figaxesforimage.autoscale_view()        self.figureforimage.canvas.draw()    def get_camera(self):        '''获取摄像头,这里可以加一些合法性的判断'''        self.camera = cv2.VideoCapture(0)        self.camera.set(4,720)    def timer_fun(self):        ret, frame = self.camera.read()        if ret:            if self.recod_flag :                # frame = cv2.flip(frame, 1)# 在帧上进行操作 左右翻转了                self.out.write(frame) # 保存视频            b, g, r = cv2.split(frame)            self.img2 = cv2.merge([r,g,b])# opencv和matplotlib的图像rgb顺序不一样            # 注意如果图像是单通道的就不需要在转换了            if hasattr(self, "showimg"):                self.showimg.remove()            self.showimg = self.figaxesforship.imshow(self.img2)            self.figaxesforship.autoscale_view()            self.figureforship.canvas.draw()        else:            # print("read camera error")            self.timer.stop()        # self.img = cv2.imread("./image/test2.jpg")        # b, g, r = cv2.split(self.img)        # self.img2 = cv2.merge([r,g,b])# opencv和matplotlib的图像rgb顺序不一样        # # 注意如果图像是单通道的就不需要在转换了        # if hasattr(self, "showimg"):        #     self.showimg.remove()        # self.showimg = self.figaxesforship.imshow(self.img2)        # self.figaxesforship.autoscale_view()        # self.figureforship.canvas.draw()        # # print("-------------")    def timer_start(self):        print("start timer")        self.recod_flag = False        self.snap_flag = True        if self.shiPinBtn.currentText() == "摄像头":            self.get_camera()        else:            fileName, filetype= QtWidgets.QFileDialog.getOpenFileName(self.centralwidget,                 "open file", '.', "avi Files (*.avi);;mp4 Files (*.mp4);;All Files (*)")            if fileName:                self.camera = cv2.VideoCapture(fileName)            else:                return None        self.timer.start(25) #设置计时间隔并启动    def timer_stop(self):        print("stop timer")        if self.recod_flag :            self.recod_flag = False            self.out.release()            self.out_release_flag = False        self.timer.stop()        self.snap_flag = False    def recod_image(self):        print("start recoding")        self.snap_flag = True        self.recod_flag = True        self.out_release_flag = True        self.fourcc = cv2.VideoWriter_fourcc(*"MPEG")        filename = self.get_time_fimename("./")        print(filename)        filename = filename + ".avi"        self.out = cv2.VideoWriter(filename,self.fourcc,20,(640,480))        self.timer.start(25) #设置计时间隔并启动    def get_time_fimename(self, option):        tmp_time = time.localtime()        tmp_nyr = str(tmp_time.tm_year)+str(tmp_time.tm_mon)+str(tmp_time.tm_mday)        tmp_sfm = str(tmp_time.tm_hour)+str(tmp_time.tm_min)+str(tmp_time.tm_sec)        return option+tmp_nyr+tmp_sfm    def snap_image(self):        # self.snap_flag = True        if self.snap_flag:# 只有开始和录制的过程中才能抓拍            ret, frame = self.camera.read()            if ret:                filename = self.get_time_fimename("./")                filename = filename+".png"                cv2.imwrite(filename, frame)

main.py如下:

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