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

21 篇文章 3 订阅
11 篇文章 0 订阅

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

推荐一个GitChat(赶紧领取,前十名免费,速速领取)
这里写图片描述

使用环境是: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, QtWidgets
import matplotlib.pyplot as plt 
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas 
from matplotlib.backends.backend_qt5 import NavigationToolbar2QT as NavigationToolbar 
import cv2
import time
import 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 sys

from PyQt5.QtWidgets import QApplication , QMainWindow

from mainWindow import *

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainW = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(mainW)
    mainW.show()
    sys.exit(app.exec_())
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值