• 基于QT的tensorRT加速的yolov5


    个人记录

    yolov5Detection.h

    #pragma once
    #pragma execution_character_set("utf-8")
    
    #include <QtWidgets/QMainWindow>
    #include <opencv2/opencv.hpp>
    #include "ui_Yolov5Detection.h"
    #include <QLabel>
    
    
    
    class Yolov5Detection : public QMainWindow
    {
        Q_OBJECT
    
    public:
        Yolov5Detection(QWidget *parent = Q_NULLPTR);
     //   ~Yolov5Detection();
        void ShowImage(QImage& src);
        QImage MatToImage(cv::Mat& image);
        void YoloDetect(cv::Mat& image);
    
    private:
        Ui::Yolov5DetectionClass ui;
        cv::Mat img;
        cv::Mat c_img;
        cv::Mat* temp_img;
        QImage src;
        QLabel* label;
        int click_num=0;
        int close_num = 0;
    //    cv::VideoCapture* capture;
    
    private slots:
        void on_OpenImagePushButton_clicked();
        void on_DetectPushButton_clicked();
        void on_OpenCamPushButton_clicked();
        void on_ExitPushButton_clicked();
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    yolov5Detection.cpp

    #include "Yolov5Detection.h"
    #include <QFileDialog>
    #include <QDir>
    #include <QPixmap>
    #include <QByteArray>
    #include <QMessageBox>
    #include <QLabel>
    #include "Detection.h"
    #include "yololayer.h"
    #include <opencv2/dnn.hpp>
    
    
    
    Yolov5Detection::Yolov5Detection(QWidget *parent)
        : QMainWindow(parent)
    {
        ui.setupUi(this);
    
    }
    
    void Yolov5Detection::ShowImage(QImage& src)
    {
        label = new QLabel;
        label->setPixmap(QPixmap::fromImage(src));
        ui.ShowImageScrollArea->setWidget(label);
    }
    
    QImage Yolov5Detection::MatToImage(cv::Mat& img)
    {
        QImage new_img((uchar*)img.data, img.cols, img.rows, img.cols * 3, QImage::Format_BGR888);
        return new_img;
    }
    
    void Yolov5Detection::on_OpenImagePushButton_clicked()
    {
        close_num = 1;
        auto strPath = QFileDialog::getOpenFileName(nullptr, "选择图片", QDir::homePath(), "Images (*.jpg *.jpeg *png *bmp)");
        this->src.load(strPath);
        ShowImage(src);
    
        cv::String imgPath = strPath.toStdString();
        img = cv::imread(imgPath);
        c_img = img.clone();
        click_num = 0;
    }
    
    void Yolov5Detection::YoloDetect(cv::Mat& image)
    {
        Connect connect;
        YOLOV5* yolo = connect.Create_YOLOV5_Object();
        std::vector<cv::Rect> Boxes;
        std::vector<const char*> ClassLables;
        yolo->Initialize("./yolov5.engine", 0);
        yolo->Detecting(image, Boxes, ClassLables);
        connect.Delete_YOLOV5_Object(yolo);
    }
    
    void Yolov5Detection::on_DetectPushButton_clicked()
    {
        temp_img = new cv::Mat();
        temp_img = &c_img;
        QMessageBox::information(nullptr, "提示", "开始检测");
        YoloDetect(*temp_img);
        QImage temp = MatToImage(*temp_img);
        ShowImage(temp);
        click_num = 1;
    }
    
    void Yolov5Detection::on_OpenCamPushButton_clicked()
    {
        close_num = 0;
        cv::VideoCapture capture;
        capture.open(0);
        while(true)
        { 
            cv::Mat frame;
            capture >> frame;
            c_img = frame;
            if (click_num%2==1)
                YoloDetect(frame);
            QImage temp = MatToImage(frame);
            ShowImage(temp);
            cv::waitKey(10);
            if (close_num == 1)
                break;
        }
        capture.release();
        cv::destroyAllWindows();
    }
    
    void Yolov5Detection::on_ExitPushButton_clicked()
    {
        close_num = 1;
        QWidget::close(); 
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
  • 相关阅读:
    科研工具分享-SCI写作课
    【让你从0到1学会c语言】程序环境和预处理指令
    Java 类之 java.lang.reflect.Method
    整数反转1
    Oracle sqlnet.ora配置文件
    Java 的 Apache Commons 工具库 助力开发
    Spring的@Bean注解原理详解
    Orin 调试GMSL camera遇到问题之MIPI CSI2 报文解析
    【leetcode】【2022/8/13】768. 最多能完成排序的块 II
    《菜狗商城》Springboot+Vue电商项目
  • 原文地址:https://blog.csdn.net/qq_44798484/article/details/125467023