python关于PyQt5结合opencv的简单使用
2021/4/11 20:25:21
本文主要是介绍python关于PyQt5结合opencv的简单使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、话不多说,先看图
借用一下马先生的图()
二、看main函数
if __name__ == '__main__': app = QApplication(sys.argv) main_window = QMainWindow() ui = boke_ui.Ui_MainWindow() ui.setupUi(main_window) main_window.show() my_face = Campus_face(ui) sys.exit(app.exec())main函数也没什么
三、我写的类
class Campus_face: img_label = None face_label = None car_label = None classroom_img = None face_collection = 0 def __init__(self, my_ui): self.my_ui = my_ui self.set_face_label() my_ui.pushButton.clicked.connect(self.face_reg_thread) my_ui.pushButton_2.clicked.connect(self.face_face_collection_yz) def set_face_label(self): hbox = QHBoxLayout(self.my_ui.groupBox) self.img_label = QLabel() hbox.addWidget(self.img_label) hbox2 = QHBoxLayout(self.my_ui.groupBox_2) self.face_label = QLabel() hbox2.addWidget(self.face_label) hbox3 = QHBoxLayout(self.my_ui.groupBox_3) self.car_label = QLabel() hbox3.addWidget(self.car_label) def face_face_collection_yz(self): self.face_collection = 1 def face_reg_thread(self): th = threading.Thread(target=self.face_reg) th.start() def face_reg(self): self.face_collection = 0 cap = cv2.VideoCapture(1) frame_num = cap.get(propId=cv2.CAP_PROP_FPS) # 获取视频帧数 frame_fourcc = cap.get(propId=cv2.CAP_PROP_FOURCC) # 视频编码格式 frame_count = cap.get(propId=cv2.CAP_PROP_FRAME_COUNT) # 视频有多少帧 frame_height = cap.get(propId=cv2.CAP_PROP_FRAME_HEIGHT) # 视频 高 frame_width = cap.get(propId=cv2.CAP_PROP_FRAME_WIDTH) # 视频 宽 while cap.isOpened(): flag, frame = cap.read() frame = cv2.resize(src=frame, dsize=(int(frame_width / 1.2), int(frame_height / 1.2)), interpolation=None) frame = cv2.flip(frame, 1) img = frame frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(frame, scaleFactor=1.2, minNeighbors=5, flags=None, minSize=None, maxSize=None) for (x, y, w, h) in faces: # 人脸检测 img = cv2.rectangle(img=img, pt1=(x, y), pt2=(x + w, y + h), color=[int(np.random.randint(0, 256, size=1)[0]), int(np.random.randint(0, 256, size=1)[0]), int(np.random.randint(0, 256, size=1)[0])], thickness=2) face_area = img[y:y + h, x:x + w] img_face_name = r'.\tmp\tmp_face_img.jpg' cv2.imwrite(img_face_name, face_area) self.face_label.setPixmap(QPixmap(img_face_name)) # 人眼 eyes = eye_cascade.detectMultiScale(face_area, scaleFactor=1.2, minNeighbors=2, flags=None, minSize=None, maxSize=None) for (ex, ey, ew, eh) in eyes: cv2.rectangle(face_area, (ex, ey), (ex + ew, ey + eh), color=[int(np.random.randint(0, 256, size=1)[0]), int(np.random.randint(0, 256, size=1)[0]), int(np.random.randint(0, 256, size=1)[0])], thickness=1, lineType=None, shift=None) # cv2.imshow('campus face', img) img_name = r'.\tmp\tmp_img.jpg' cv2.imwrite(img_name, img) self.img_label.setPixmap(QPixmap(img_name)) if ord('q') == cv2.waitKey(int(1000 / frame_num)) or flag == False: break if self.face_collection == 1: break cv2.destroyAllWindows() cap.release()内容也不算多,知识挺多的
四、当然还得引入一些模块及相关配置
import sys import cv2 import numpy as np from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import QHBoxLayout, QLabel, QVBoxLayout, QApplication, QMainWindow, QFormLayout, QLineEdit, QWidget import threading from Campus_security import boke_ui face_cascade = cv2.CascadeClassifier( r'G:\huwei_welding\Campus_security\cascade_file\haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier(r'G:\huwei_welding\Campus_security\cascade_file\haarcascade_eye.xml')下面两个是人脸和人眼的级联器而已
五、还有图形界面
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'boke_ui.ui' # # Created by: PyQt5 UI code generator 5.15.0 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(1148, 724) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) self.horizontalLayout.setObjectName("horizontalLayout") self.tabWidget = QtWidgets.QTabWidget(self.centralwidget) font = QtGui.QFont() font.setFamily("黑体") font.setPointSize(14) self.tabWidget.setFont(font) self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.pushButton = QtWidgets.QPushButton(self.tab) self.pushButton.setGeometry(QtCore.QRect(280, 560, 171, 61)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(self.tab) self.pushButton_2.setGeometry(QtCore.QRect(60, 560, 181, 61)) self.pushButton_2.setObjectName("pushButton_2") self.pushButton_5 = QtWidgets.QPushButton(self.tab) self.pushButton_5.setGeometry(QtCore.QRect(490, 560, 171, 61)) self.pushButton_5.setObjectName("pushButton_5") self.widget = QtWidgets.QWidget(self.tab) self.widget.setGeometry(QtCore.QRect(10, 10, 1101, 541)) self.widget.setObjectName("widget") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget) self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.groupBox = QtWidgets.QGroupBox(self.widget) self.groupBox.setObjectName("groupBox") self.horizontalLayout_2.addWidget(self.groupBox) self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.groupBox_2 = QtWidgets.QGroupBox(self.widget) self.groupBox_2.setStyleSheet("") self.groupBox_2.setObjectName("groupBox_2") self.verticalLayout.addWidget(self.groupBox_2) self.groupBox_3 = QtWidgets.QGroupBox(self.widget) self.groupBox_3.setObjectName("groupBox_3") self.verticalLayout.addWidget(self.groupBox_3) self.horizontalLayout_2.addLayout(self.verticalLayout) self.horizontalLayout_2.setStretch(0, 4) self.horizontalLayout_2.setStretch(1, 2) self.tabWidget.addTab(self.tab, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.tabWidget.addTab(self.tab_2, "") self.horizontalLayout.addWidget(self.tabWidget) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 1148, 26)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "关于PyQt图像化界面人脸识别")) self.pushButton.setText(_translate("MainWindow", "打开摄像头")) self.pushButton_2.setText(_translate("MainWindow", "关闭摄像头")) self.pushButton_5.setText(_translate("MainWindow", "保存视频")) self.groupBox.setTitle(_translate("MainWindow", "视频")) self.groupBox_2.setTitle(_translate("MainWindow", "人脸")) self.groupBox_3.setTitle(_translate("MainWindow", "车辆")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "QT视频处理")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "百度云语音识别"))Qt Designer拖出来的,没什么好讲的
六、运行
将二、三、四方一个文件,五放一个文件(这命名和我的不同那就得修改模块引入那句代码了),然后就可以运行了
七、关键代码关键知识点
face_cascade = cv2.CascadeClassifier( r'G:\huwei_welding\Campus_security\cascade_file\haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier(r'G:\huwei_welding\Campus_security\cascade_file\haarcascade_eye.xml')这个没有,github opencv自己下载 (级联器相关)
def set_face_label(self): hbox = QHBoxLayout(self.my_ui.groupBox) self.img_label = QLabel() hbox.addWidget(self.img_label) hbox2 = QHBoxLayout(self.my_ui.groupBox_2) self.face_label = QLabel() hbox2.addWidget(self.face_label) hbox3 = QHBoxLayout(self.my_ui.groupBox_3) self.car_label = QLabel() hbox3.addWidget(self.car_label)在groupbox那添加label,用于显示图片而已
faces = face_cascade.detectMultiScale(frame, scaleFactor=1.2, minNeighbors=5, flags=None, minSize=None, maxSize=None) for (x, y, w, h) in faces: # 人脸检测 img = cv2.rectangle(img=img, pt1=(x, y), pt2=(x + w, y + h), color=[int(np.random.randint(0, 256, size=1)[0]), int(np.random.randint(0, 256, size=1)[0]), int(np.random.randint(0, 256, size=1)[0])], thickness=2) face_area = img[y:y + h, x:x + w] img_face_name = r'.\tmp\tmp_face_img.jpg' cv2.imwrite(img_face_name, face_area) self.face_label.setPixmap(QPixmap(img_face_name))这个也就是将人脸框出来而已(级联器搞出来的人脸区域坐标),然后花里胡哨点用numpy的随机数生成好看点的框框而已
八、好像也没有什么了
忘了再回去复习下吧,后面在不错人脸识别(人脸训练)
这篇关于python关于PyQt5结合opencv的简单使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享
- 2024-12-19使用python 把docx转为pdf文件有哪些方法?-icode9专业技术文章分享
- 2024-12-19python怎么更换换pip的源镜像?-icode9专业技术文章分享
- 2024-12-19Python资料:新手入门的全面指南
- 2024-12-19Python股票自动化交易实战入门教程
- 2024-12-19Python股票自动化交易入门教程
- 2024-12-18Python量化入门教程:轻松掌握量化交易基础知识