由于以前写的基础知识没有配写代码: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_())