基于Qt的yolov5工程

该博客介绍了一个基于Qt框架的Yolov5工程实现,包括main.cpp、mainwindow.cpp、yolov5.h和yolov5.cpp等关键文件的详细内容,展示了如何在Qt环境中集成和运行Yolov5进行目标检测。
摘要由CSDN通过智能技术生成

Yolov5Qt工程
main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
   
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"



MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
   
    ui->setupUi(this);
    setWindowTitle(QStringLiteral("YoloV5目标检测软件"));

    timer = new QTimer(this);
    timer->setInterval(33);
    connect(timer,SIGNAL(timeout()),this,SLOT(readFrame()));
    ui->startdetect->setEnabled(false);
    ui->stopdetect->setEnabled(false);
    Init();
}

MainWindow::~MainWindow()
{
   

    capture->release();
    delete capture;
    delete [] yolo_nets;
    delete yolov5;
    delete ui;
}

void MainWindow::Init()
{
   
    capture = new cv::VideoCapture();
    yolo_nets = new NetConfig[4]{
   
                                {
   0.5, 0.5, 0.5, "yolov5s"},
                                {
   0.6, 0.6, 0.6, "yolov5m"},
                                {
   0.65, 0.65, 0.65, "yolov5l"},
                                {
   0.75, 0.75, 0.75, "yolov5x"}
                            };
    conf = yolo_nets[0];
    yolov5 = new YOLOV5();
    yolov5->Initialization(conf);
    ui->textEditlog->append(QStringLiteral("默认模型类别:yolov5s args: %1 %2 %3")
                            .arg(conf.nmsThreshold)
                            .arg(conf.objThreshold)
                            .arg(conf.confThreshold));
}

void MainWindow::readFrame()
{
   
    cv::Mat frame;
    capture->read(frame);
    if (frame.empty()) return;

    auto start = std::chrono::steady_clock::now();
    yolov5->detect(frame);
    auto end = std::chrono::steady_clock::now();
    std::chrono::duration<double, std::milli> elapsed = end - start;
    ui->textEditlog->append(QString("cost_time: %1 ms").arg(elapsed.count()));
    cv::cvtColor(frame, frame, cv::COLOR_BGR2RGB);
    QImage rawImage = QImage((uchar*)(frame.data),frame.cols,frame.rows,frame.step,QImage::Format_RGB888);
    ui->label->setPixmap(QPixmap::fromImage(rawImage));
}

void MainWindow::on_openfile_clicked()
{
   
    QString filename = QFileDialog::getOpenFileName(this,QStringLiteral("打开文件"),".","*.mp4 *.avi;;*.png *.jpg *.jpeg *.bmp");
    if(!QFile::exists(filename)){
   
        return;
    }
    ui->statusbar->showMessage(filename);

    QMimeDatabase db;
    QMimeType mime = db.mimeTypeForFile(filename);
    if (mime.name().startsWith("image/")) {
   
        cv::Mat src = cv::imread(filename.toLatin1().data());
        if(src.empty()){
   
            ui->statusbar->showMessage("图像不存在!");
            return;
        }
        cv::Mat temp;
        if(src.channels()==4)
            cv::cvtColor(src,temp,cv::COLOR_BGRA2RGB);
        else if 
  • 0
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OpenCV是一个开源的计算机视觉库,提供了丰富的图像和视频处理功能。它可以用于图像处理、视频分析、物体识别等任务。 Qt是一个跨平台的应用程序开发框架,可以用于开发各种类型的应用程序。它提供了一套丰富的图形界面和用户交互组件,可以方便地创建用户友好的界面。 YOLOv5是基于深度学习的目标检测算法,可用于实时物体识别和定位。它是YOLO系列算法的最新版本,相对于之前的版本,YOLOv5具有更高的准确性和更快的处理速度。 结合OpenCV、QtYOLOv5,可以开发一个功能强大的图像处理和物体识别应用程序。首先,可以使用OpenCV读取和处理图像或视频数据。然后,使用YOLOv5对图像或视频中的物体进行识别和定位。最后,使用Qt创建一个用户友好的界面,用于显示处理结果和与用户交互。 在这个应用程序中,用户可以选择要处理的图像或视频文件,并可以在界面上实时展示物体识别的结果。用户还可以进行一些参数调整,例如检测阈值、模型选择等。通过Qt的交互组件,用户可以方便地进行操作和查看结果。 这样的应用程序可以应用于各种场景,例如监控系统、自动驾驶、工业检测等。它能够快速准确地识别和定位物体,从而提升工作效率和系统的智能化水平。同时,由于OpenCV、QtYOLOv5都是开源的,开发者可以根据自己的需求进行定制和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值