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_())
阅读全文
1 0
- PyQt5+OpenCV+Matplotlib 基础操作教程代码
- Pyqt5+matplotlib+opencv实现图像直方图操作
- PyQt5+OpenCV+Matplotlib综合训练
- pyqt5学习(一)基础操作
- [笔记]SciPy、Matplotlib基础操作
- PyQt5+matplotlib结合显示报表
- Matplotlib 入门(一):基础操作
- opencv-基础阈值操作
- Opencv--视频操作基础
- 【openCV】基础操作
- opencv视频基础操作
- OpenCV视频操作基础
- opencv 基础操作总结
- opencv基础函数代码
- Matplotlib 教程
- Matplotlib 教程
- Matplotlib 教程
- Matplotlib 教程
- C3P0连接问题
- 思科设备syslog支持
- jquery地区选择三级联动
- aar
- telechips平台gstreamer实现pango字幕混入视频功能
- PyQt5+OpenCV+Matplotlib 基础操作教程代码
- Sift中尺度空间、高斯金字塔、差分金字塔(DOG金字塔)、图像金字塔
- Tomcat中ISO-8859-1转UTF-8中文乱码的问题
- 网易云音乐 ubuntu14.04安装包url
- STL-vector的使用 详细说明
- python 添加环境变量后,仍显示python不是内部命令 pycharm注册码
- ElasticSearch及ElasticSearch-head的安装(windows版本)
- Java IO(01) 编码问题(一)
- cannot be cast to org.springframework.web.accept.ContentNegotiationManager