python关于PyQt5结合opencv的简单使用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python关于PyQt5结合opencv的简单使用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含8644字,纯文字阅读大概需要13分钟。
内容图文
![python关于PyQt5结合opencv的简单使用](/upload/InfoBanner/zyjiaocheng/593/93a232a62e014c7b9fd53756e230198a.jpg)
一、话不多说,先看图
借用一下马先生的图()
二、看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的简单使用全部内容,希望文章能够帮你解决python关于PyQt5结合opencv的简单使用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。