智能汽车竞赛摄像头处理(6)——在屏幕中画出找赛道边线和赛道中线

本文主要是介绍智能汽车竞赛摄像头处理(6)——在屏幕中画出找赛道边线和赛道中线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

思路

代码

使用

调试方法


前言

前一篇文章我们通过代码找到了赛道边线和中线,为了直观地体现我们通过算法找的边线和中线是否合适,我们最好是将找到的赛道边线和中线画在屏幕上,这样我们就可以看到找线的效果如何,为了不影响比赛时图像处理时间过长影响小车运行,后面小车要正式跑之前将显示关闭即可。

思路

首先我们要知道在显示屏上只画一个点的显示效果肯定是不明显的,如果我们只把边线和中线上的点画出来,效果可能不明显。

所以我们除了要把边线和中线上的点画出来以外还要将边线和中线上的点的周围的几个点也画出来,来把线画粗一点,为此我们可以采用九宫格画线法,避免 少画点 和 画到重复的点。

代码

九宫格画线的伪代码如下,大家可以借鉴思路后根据实际情况改动。

//绘制边线函数(画线即画很多个点)
void Find_Mid_Line_Draw_Line(void)
{for(uint8 i = MT9V03X_H - 1; i > 0;i--){//全画draw_points(left_line_list[i],i,BLUE);draw_points(right_line_list[i],i,BLUE);draw_points(mid_line_list[i],i,RED);}
}//九宫格画点函数
//在九宫格画线的同时要注意数组不能越界,即判断是否为边界点,若有些点是边界点就不能画点
void draw_points(uint8 x,uint8 y,uint16 color)
{if(x != MT9V03X_W - 1){tft180_draw_point(x+1,y,color);if(y != MT9V03X_H - 1){tft180_draw_point(x,y+1,color);tft180_draw_point(x+1,y+1,color);}if(y != 0){tft180_draw_point(x,y-1,color);tft180_draw_point(x+1,y-1,color);}}if(x != 0){tft180_draw_point(x-1,y,color);if(y != MT9V03X_H - 1){tft180_draw_point(x,y+1,color);tft180_draw_point(x-1,y+1,color);}if(y != 0){tft180_draw_point(x,y-1,color);tft180_draw_point(x-1,y-1,color);}}tft180_draw_point(x,y,color);
}

使用

在cpu1.c中添加以下代码:

    while (TRUE){// 此处编写需要循环执行的代码if(mt9v03x_finish_flag)     //一幅图像完全采集完毕后,再进行图像的显示判断和显示{//Set_image_towvalues(150); //固定阈值二值化BandW_threshold = otsuThreshold_fast(mt9v03x_image[0]);//大津法得到动态阈值Set_image_towvalues(BandW_threshold); //动态阈值二值化,得到二值化后的二维数组mt9v03x_image_BandWFind_Mid_Line(mt9v03x_image_BandW[MT9V03X_H][MT9V03X_W]);//找边线tft180_displayimage03x(mt9v03x_image_BandW[0],MT9V03X_W,MT9V03X_H);//显示二值化后的图像Find_Mid_Line_Draw_Line();//画线mt9v03x_finish_flag = 0;//图像显示完成后才对标志位清零}// 此处编写需要循环执行的代码}

调试方法

烧录代码后,调试代码的方法:

(1)观察代码运行效果:找线找的对不对,准不准。

(2)可以用手去推车,观察屏幕显示的图像,观察在此找线逻辑中会不会出现赛道偏差的情况,为避免这些情况出现,要增加或修改代码把bug解决。

这篇关于智能汽车竞赛摄像头处理(6)——在屏幕中画出找赛道边线和赛道中线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/679890

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

智能交通(二)——Spinger特刊推荐

特刊征稿 01  期刊名称: Autonomous Intelligent Systems  特刊名称: Understanding the Policy Shift  with the Digital Twins in Smart  Transportation and Mobility 截止时间: 开放提交:2024年1月20日 提交截止日

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数