python关于PyQt5结合opencv的简单使用

python关于PyQt5结合opencv的简单使用,第1张

概述一、话不多说,先看图借用一下马先生的图()二、看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_f 一、话不多说,先看图

借用一下马先生的图()

二、看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 sysimport cv2import numpy as npfrom PyQt5.QtGui import Qpixmapfrom PyQt5.QtWidgets import QHBoxLayout, QLabel, QVBoxLayout, QApplication, QMainWindow, qformlayout, QlineEdit, QWidgetimport threadingfrom Campus_security import boke_uiface_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, QtWidgetsclass 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的简单使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1187618.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存