毕业设计项目——基于QT4+Opencv开发的道路偏移检测与预警系统

这篇具有很好参考价值的文章主要介绍了毕业设计项目——基于QT4+Opencv开发的道路偏移检测与预警系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

完整项目地址:https://download.csdn.net/download/lijunhcn/88453342

基于QT4+Opencv的道路道路偏移检测与预警系统

开发环境:Ubuntu14.04+QT4.8.5+Opencv2.4.8

已经实现的功能:

  • 道路偏移检测
  • 道路偏移预警
  • 串口读取外部传感器数据

部分源码展示:文章来源地址https://www.toymoban.com/news/detail-771085.html

#include "dlpy_main.h"
#include "ui_dlpy_main.h"
#include "utils.h"

dlpy_main::dlpy_main(int state,string filename,QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::dlpy_main)
{

    ui->setupUi(this);
    setGeometry(697, 50, 220, 480);

    wid = new widget();
    wid->setWindowFlags(Qt::FramelessWindowHint);
    wid->show();

    frame = new dlpy_frames(state,filename);
    frame->setWindowFlags(Qt::FramelessWindowHint);     //隐藏标题栏
    frame->show();
    connect(this,SIGNAL(setparasignal(int,int,int,int,int)),frame,SLOT(setparaslot(int,int,int,int,int)));
    connect(frame,SIGNAL(setalertsignal(int)),this,SLOT(setalertslot(int)));    //每一帧图像信号槽初始化警报参数
    connect(this,SIGNAL(setlinesignal(int)),frame,SLOT(setlineslot(int)));


/
    //img_alert: 显示所有
    //img_alert_1: 红色警报
    //img_alert_3: 无警报
    //img_temp:所有
    //img:所有


    img_alert = cv::imread("/home/hugo/code/bin/alert.bmp");
    img_alert_1 = cv::imread("/home/hugo/code/bin/alert_2.bmp");
    img_alert_2 = cv::imread("/home/hugo/code/bin/alert_3.bmp");
    img_temp = cv::imread("/home/hugo/code/bin/alert.bmp");
    roi_l=Rect(0, 0, (img_alert.cols-1)/2, img_alert.rows-1);
    roi_r=Rect((img_alert.cols-1)/2, 0, (img_alert.cols-1)/2, img_alert.rows-1);
    QGraphicsScene *scene = new QGraphicsScene;
    QImage img;
    img.load("/home/hugo/code/bin/alert.bmp");
    QPixmap mp;
    mp=mp.fromImage(img);

    times_alert=0;
    last_alert=0;
    w0=weatherobj(10,20,30,40,50);
    w1=weatherobj(60,70,80,90,100);
    w2=weatherobj(100,110,120,130,140);
    w3=weatherobj(10,60,0,42,100);
    w4=weatherobj(150,160,170,180,190);
    w5=weatherobj(200,210,220,230,240);
    w6=weatherobj(10,25,10,32,90);
    w7=weatherobj(200,240,220,250,123);

    QImage *qimg=new QImage;
    *qimg=mat2qimage(img_temp);
    /*cvtColor(img_temp, img_temp, CV_BGR2RGB);
    qimg = new QImage((unsigned char*)img_temp.data, // uchar* data
            img_temp.cols, img_temp.rows, // width height
            img_temp.step, //bytesPerLine
            QImage::Format_RGB888); //format*/
    scene->addPixmap(QPixmap::fromImage(*qimg));
    ui->graphicsView->setScene(scene);
    ui->graphicsView->resize(qimg->width() + 10, qimg->height() + 10);
    ui->graphicsView->show();
     timer = new QTimer(this);
     timer->setInterval(30);
     connect(timer,SIGNAL(timeout()),this,SLOT(alertFrame()));      //每隔30s读取一次报警图片
     timer->start();

}

dlpy_main::~dlpy_main()
{
    delete ui;
}

//设置警报参数
void dlpy_main::setalertslot(int alert){
    times_alert=3;
    last_alert=alert;
}

void dlpy_main::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

//警报显示
void dlpy_main::alertFrame()
{
    Mat roi_alert,roi_alert_tmp,roi_temp;
    if(times_alert>0)
    {
        if(times_alert%2==0)
        {
            if(last_alert==1){roi_temp=img_temp(roi_l);roi_alert_tmp = img_alert_1(roi_l);}
            if(last_alert==2){roi_temp=img_temp(roi_r);roi_alert_tmp = img_alert_1(roi_r);}
            if(last_alert==3){roi_temp=img_temp(roi_l);roi_alert_tmp = img_alert_2(roi_l);}
            if(last_alert==4){roi_temp=img_temp(roi_r);roi_alert_tmp = img_alert_2(roi_r);}
            roi_alert_tmp.copyTo(roi_temp);
        }else{
            img_alert.copyTo(img_temp);
        }
        times_alert--;      //控制闪烁
        QGraphicsScene *scene = new QGraphicsScene;
        QImage *qimg=new QImage;
        *qimg=mat2qimage(img_temp);
        scene->addPixmap(QPixmap::fromImage(*qimg));
        ui->graphicsView->setScene(scene);
        ui->graphicsView->resize(qimg->width() + 10, qimg->height() + 10);
        ui->graphicsView->show();
    }else{

    }
}


void dlpy_main::on_hs_zthreshold_valueChanged(int value)
{
    ui->label_z->setText(QString::number(ui->hs_zthreshold->value(), 10));
    ui->label_c->setText(QString::number(ui->hs_cthreshold->value(), 10));
    ui->label_t->setText(QString::number(ui->hs_threshold->value(), 10));
    ui->label_tl->setText(QString::number(ui->hs_thresholdline->value(), 10));
    ui->label_a->setText(QString::number(ui->hs_alpha->value(), 10));
}

void dlpy_main::on_hs_cthreshold_valueChanged(int value)
{
    ui->label_z->setText(QString::number(ui->hs_zthreshold->value(), 10));
    ui->label_c->setText(QString::number(ui->hs_cthreshold->value(), 10));
    ui->label_t->setText(QString::number(ui->hs_threshold->value(), 10));
    ui->label_tl->setText(QString::number(ui->hs_thresholdline->value(), 10));
    ui->label_a->setText(QString::number(ui->hs_alpha->value(), 10));

}

void dlpy_main::on_hs_threshold_valueChanged(int value)
{
    ui->label_z->setText(QString::number(ui->hs_zthreshold->value(), 10));
    ui->label_c->setText(QString::number(ui->hs_cthreshold->value(), 10));
    ui->label_t->setText(QString::number(ui->hs_threshold->value(), 10));
    ui->label_tl->setText(QString::number(ui->hs_thresholdline->value(), 10));
    ui->label_a->setText(QString::number(ui->hs_alpha->value(), 10));
}

void dlpy_main::on_hs_thresholdline_valueChanged(int value)
{
    ui->label_z->setText(QString::number(ui->hs_zthreshold->value(), 10));
    ui->label_c->setText(QString::number(ui->hs_cthreshold->value(), 10));
    ui->label_t->setText(QString::number(ui->hs_threshold->value(), 10));
    ui->label_tl->setText(QString::number(ui->hs_thresholdline->value(), 10));
    ui->label_a->setText(QString::number(ui->hs_alpha->value(), 10));
}

void dlpy_main::on_hs_alpha_valueChanged(int value)
{
    ui->label_z->setText(QString::number(ui->hs_zthreshold->value(), 10));
    ui->label_c->setText(QString::number(ui->hs_cthreshold->value(), 10));
    ui->label_t->setText(QString::number(ui->hs_threshold->value(), 10));
    ui->label_tl->setText(QString::number(ui->hs_thresholdline->value(), 10));
    ui->label_a->setText(QString::number(ui->hs_alpha->value(), 10));
}


void dlpy_main::on_hs_zthreshold_sliderReleased()
{

    emit setparasignal(ui->hs_zthreshold->value(),ui->hs_cthreshold->value(),ui->hs_threshold->value(),ui->hs_thresholdline->value(),ui->hs_alpha->value());

}

void dlpy_main::on_hs_cthreshold_sliderReleased()
{
     emit setparasignal(ui->hs_zthreshold->value(),ui->hs_cthreshold->value(),ui->hs_threshold->value(),ui->hs_thresholdline->value(),ui->hs_alpha->value());
}

void dlpy_main::on_hs_threshold_sliderReleased()
{
     emit setparasignal(ui->hs_zthreshold->value(),ui->hs_cthreshold->value(),ui->hs_threshold->value(),ui->hs_thresholdline->value(),ui->hs_alpha->value());
}

void dlpy_main::on_hs_thresholdline_sliderReleased()
{
     emit setparasignal(ui->hs_zthreshold->value(),ui->hs_cthreshold->value(),ui->hs_threshold->value(),ui->hs_thresholdline->value(),ui->hs_alpha->value());
}

void dlpy_main::on_hs_alpha_sliderReleased()
{
     emit setparasignal(ui->hs_zthreshold->value(),ui->hs_cthreshold->value(),ui->hs_threshold->value(),ui->hs_thresholdline->value(),ui->hs_alpha->value());
}

//A线定位
void dlpy_main::on_button_A_clicked()
{
    emit setlinesignal(1);
}


void dlpy_main::on_horizontalScrollBar_sliderReleased()
{
    if(ui->horizontalScrollBar->value()==0){
    ui->hs_zthreshold->setValue(w0.getz());
    ui->hs_cthreshold->setValue(w0.getct());
    ui->hs_threshold->setValue(w0.gett());
    ui->hs_thresholdline->setValue(w0.getl());
    ui->hs_alpha->setValue(w0.geta());
     ui->label_w->setText(QString::fromUtf8("晴天"));
    }
    if(ui->horizontalScrollBar->value()==1){
        ui->hs_zthreshold->setValue(w1.getz());
        ui->hs_cthreshold->setValue(w1.getct());
        ui->hs_threshold->setValue(w1.gett());
        ui->hs_thresholdline->setValue(w1.getl());
        ui->hs_alpha->setValue(w1.geta());
         ui->label_w->setText(QString::fromUtf8("阴天"));
    }
    if(ui->horizontalScrollBar->value()==2){
        ui->hs_zthreshold->setValue(w2.getz());
        ui->hs_cthreshold->setValue(w2.getct());
        ui->hs_threshold->setValue(w2.gett());
        ui->hs_thresholdline->setValue(w2.getl());
        ui->hs_alpha->setValue(w2.geta());
        ui->label_w->setText(QString::fromUtf8("雨天"));
    }
    if(ui->horizontalScrollBar->value()==3){
        ui->hs_zthreshold->setValue(w3.getz());
        ui->hs_cthreshold->setValue(w3.getct());
        ui->hs_threshold->setValue(w3.gett());
        ui->hs_thresholdline->setValue(w3.getl());
        ui->hs_alpha->setValue(w3.geta());
        ui->label_w->setText(QString::fromUtf8("雪天"));
    }
    if(ui->horizontalScrollBar->value()==4){
        ui->hs_zthreshold->setValue(w4.getz());
        ui->hs_cthreshold->setValue(w4.getct());
        ui->hs_threshold->setValue(w4.gett());
        ui->hs_thresholdline->setValue(w4.getl());
        ui->hs_alpha->setValue(w4.geta());
        ui->label_w->setText(QString::fromUtf8("自定义1"));
    }
    if(ui->horizontalScrollBar->value()==5){
        ui->hs_zthreshold->setValue(w5.getz());
        ui->hs_cthreshold->setValue(w5.getct());
        ui->hs_threshold->setValue(w5.gett());
        ui->hs_thresholdline->setValue(w5.getl());
        ui->hs_alpha->setValue(w5.geta());
        ui->label_w->setText(QString::fromUtf8("自定义2"));
    }
    if(ui->horizontalScrollBar->value()==6){
        ui->hs_zthreshold->setValue(w6.getz());
        ui->hs_cthreshold->setValue(w6.getct());
        ui->hs_threshold->setValue(w6.gett());
        ui->hs_thresholdline->setValue(w6.getl());
        ui->hs_alpha->setValue(w6.geta());
       ui->label_w->setText(QString::fromUtf8("自定义3"));
    }
    if(ui->horizontalScrollBar->value()==7){
        ui->hs_zthreshold->setValue(w7.getz());
        ui->hs_cthreshold->setValue(w7.getct());
        ui->hs_threshold->setValue(w7.gett());
        ui->hs_thresholdline->setValue(w7.getl());
        ui->hs_alpha->setValue(w7.geta());
        ui->label_w->setText(QString::fromUtf8("自定义4"));
    }
    emit setparasignal(ui->hs_zthreshold->value(),ui->hs_cthreshold->value(),ui->hs_threshold->value(),ui->hs_thresholdline->value(),ui->hs_alpha->value());
}

//载入保存的参数
void dlpy_main::on_button_load_clicked()
{
    std::ifstream rconfig;
    rconfig.open("fconfig.txt",std::ios::binary);
    rconfig.read((char *)&w0,sizeof(weatherobj));
    rconfig.read((char *)&w1,sizeof(weatherobj));
    rconfig.read((char *)&w2,sizeof(weatherobj));
    rconfig.read((char *)&w3,sizeof(weatherobj));
    rconfig.read((char *)&w4,sizeof(weatherobj));
    rconfig.read((char *)&w5,sizeof(weatherobj));
    rconfig.read((char *)&w6,sizeof(weatherobj));
    rconfig.read((char *)&w7,sizeof(weatherobj));
    rconfig.read((char *)&(frame->lineA_l),sizeof(stdline));
    rconfig.read((char *)&(frame->lineA_r),sizeof(stdline));
    rconfig.close();
}

//保存参数函数
void dlpy_main::on_button_save_clicked()
{
    if(ui->horizontalScrollBar->value()==0){
        w0=weatherobj(ui->hs_zthreshold->value(),ui->hs_cthreshold->value(),ui->hs_threshold->value(),ui->hs_thresholdline->value(),ui->hs_alpha->value());
    }
    if(ui->horizontalScrollBar->value()==1){
        w1=weatherobj(ui->hs_zthreshold->value(),ui->hs_cthreshold->value(),ui->hs_threshold->value(),ui->hs_thresholdline->value(),ui->hs_alpha->value());
    }
    if(ui->horizontalScrollBar->value()==2){
        w2=weatherobj(ui->hs_zthreshold->value(),ui->hs_cthreshold->value(),ui->hs_threshold->value(),ui->hs_thresholdline->value(),ui->hs_alpha->value());
    }
    if(ui->horizontalScrollBar->value()==3){
        w3=weatherobj(ui->hs_zthreshold->value(),ui->hs_cthreshold->value(),ui->hs_threshold->value(),ui->hs_thresholdline->value(),ui->hs_alpha->value());
    }
    if(ui->horizontalScrollBar->value()==4){
        w4=weatherobj(ui->hs_zthreshold->value(),ui->hs_cthreshold->value(),ui->hs_threshold->value(),ui->hs_thresholdline->value(),ui->hs_alpha->value());
    }
    if(ui->horizontalScrollBar->value()==5){
        w5=weatherobj(ui->hs_zthreshold->value(),ui->hs_cthreshold->value(),ui->hs_threshold->value(),ui->hs_thresholdline->value(),ui->hs_alpha->value());
    }
    if(ui->horizontalScrollBar->value()==6){
        w6=weatherobj(ui->hs_zthreshold->value(),ui->hs_cthreshold->value(),ui->hs_threshold->value(),ui->hs_thresholdline->value(),ui->hs_alpha->value());
    }
    if(ui->horizontalScrollBar->value()==7){
        w7=weatherobj(ui->hs_zthreshold->value(),ui->hs_cthreshold->value(),ui->hs_threshold->value(),ui->hs_thresholdline->value(),ui->hs_alpha->value());
    }

    //将参数写到fconfig.txt文档中
    std::ofstream wconfig;
    wconfig.open("fconfig.txt",std::ios::binary);
    wconfig.write((char *)&w0,sizeof(weatherobj));
    wconfig.write((char *)&w1,sizeof(weatherobj));
    wconfig.write((char *)&w2,sizeof(weatherobj));
    wconfig.write((char *)&w3,sizeof(weatherobj));
    wconfig.write((char *)&w4,sizeof(weatherobj));
    wconfig.write((char *)&w5,sizeof(weatherobj));
    wconfig.write((char *)&w6,sizeof(weatherobj));
    wconfig.write((char *)&w7,sizeof(weatherobj));
    wconfig.write((char *)&(frame->lineA_l),sizeof(stdline));
    wconfig.write((char *)&(frame->lineA_r),sizeof(stdline));
    wconfig.close();
}

//退出函数
void dlpy_main::on_button_exit_clicked()
{
    exit(-1);
}

//高级按钮点击事件
void dlpy_main::on_button_ext_clicked()
{
    if(ui->button_ext->text()==QString::fromUtf8("高级")){
        setGeometry(430, 50, 420, 480);
        ui->button_ext->setText(QString::fromUtf8("普通"));
    }
    else{
        ui->button_ext->setText(QString::fromUtf8("高级"));
        setGeometry(697, 50, 220, 480);
    }
}

到了这里,关于毕业设计项目——基于QT4+Opencv开发的道路偏移检测与预警系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 毕业设计-基于深度学习的交通标识识别-opencv

    目录 前言 课题背景和意义 实现技术思路 实现效果图样例     📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学

    2024年02月02日
    浏览(62)
  • 毕业设计-基于机器视觉的手势识别系统-OPENCV

    目录 前言 课题背景和意义 实现技术思路 一、系统总体设计 二、手势区域特征提取 三、系统设计与实现 四、总结 实现效果图样例 最后     📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年

    2024年02月08日
    浏览(68)
  • 毕业设计——基于OpenCV的视频人脸识别检测系统的设计与实现

    如需完整源码,可以联系博主获取 本系统基于OpenCV使用Haar级联与dlib库进行人脸检测及实时跟踪,应用LBPH算法开发了一个功能相对完整的人脸识别系统。系统采用sqlite3进行序列化数据存储,能够对陌生人脸闯入进行报警,并拥有基于PyQt5设计的GUI实现。 一、引言 随着计算机

    2024年04月12日
    浏览(52)
  • 基于 opencv 的人脸识别上课考勤系统,附源码,可作为毕业设计

    这个人脸识别考勤签到系统是基于大佬的人脸识别陌生人报警系统二次开发的。 项目使用Python实现,基于OpenCV框架进行人脸识别和摄像头硬件调用,同时也用OpenCV工具包处理图片。交互界面使用pyqt5实现。 该系统实现了从学生信息输入、人脸数据录入、人脸数据训练,学生信

    2024年02月08日
    浏览(72)
  • Python 毕业设计 - 基于 opencv 的人脸识别上课考勤系统,附源码

    源码下载地址https://download.csdn.net/download/2302_77835532/88237252 这个人脸识别考勤签到系统是基于大佬的人脸识别陌生人报警系统二次开发的。 项目使用Python实现,基于OpenCV框架进行人脸识别和摄像头硬件调用,同时也用OpenCV工具包处理图片。交互界面使用pyqt5实现。 该系统实现

    2024年02月05日
    浏览(73)
  • 人脸识别系统OpenCV+dlib+python(含数据库)Pyqt5界面设计 项目源码 毕业设计

    Python语言、dlib、OpenCV、Pyqt5界面设计、sqlite3数据库      本系统使用dlib作为人脸识别工具,dlib提供一个方法可将人脸图片数据映射到128维度的空间向量,如果两张图片来源于同一个人,那么两个图片所映射的空间向量距离就很近,否则就会很远。因此,可以通过提取图片并

    2024年02月05日
    浏览(68)
  • 毕业设计-基于机器视觉的室内智能安防车系统 -STM32和 OpenCV

    目录 前言 课题背景和意义 实现技术思路 一、系统整体设计 二、智能安防车硬件系统设计 三、室内安防车自动巡逻机制的实现 四、基于 OpenCV 图像识别的火焰识别 五、分类器设计及软件实现 代码部分 实现效果图样例 最后     📅大四是整个大学期间最忙碌的时光,一边要忙

    2023年04月17日
    浏览(55)
  • C++毕业设计基于QT实现的超市收银管理系统源代码+数据库

    C++毕业设计基于QT实现的超市收银管理系统源代码+数据库 编译使用 编译完成后,需要拷贝 file目录下的数据库 POP.db文件到可执行程序目录下 登录界面 主界面 会员管理 完整代码下载地址:基于QT实现的超市收银管理系统源代码+数据库

    2024年02月09日
    浏览(63)
  • 基于SSM框架开发的教务管理系统(毕业设计,期末设计)

    目录 🍬1 前言 1.1 项目所需要的知识 1.2 开发项目的环境和工具 🍬2 系统结构 2.1系统流程图(E-R图) 2.2配置pom.xml 🍬3 程序设计及运行 3.1添加课程信息 (1)功能描述 (2)实现代码 (3)实现截图 3.2学生已修课程 (1)功能描述 (2)实现代码 (3)实现截图 3.3添加教师信

    2024年02月08日
    浏览(67)
  • 基于安卓的五子棋游戏毕业设计(!!!不止这个项目,很多基于安卓基于小程序的项目都可以)

    基于 Android 的五子棋系统开发 摘 要 移动互联网时代的到来极大的改变了我们的生活,而Android是一种以Linux为基础的开放源码操作系统迅速占领了智能机操作系统,所以在Android 环境下开发显得尤为必要,本文详细介绍了在Android平台上以Java为语言编写游戏的过程。五子棋游戏

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包