基于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();
};

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(); 
}


猜你喜欢

转载自blog.csdn.net/qq_44798484/article/details/125467023