智能汽车竞赛摄像头处理(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

相关文章

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.