基于C++的车辆装甲板检测自瞄系统

article/2025/8/19 4:55:10

资源下载地址:https://download.csdn.net/download/sheziqiong/85773209
资源下载地址:https://download.csdn.net/download/sheziqiong/85773209

装甲板检测

由于在比赛过程中操作手是第一视角,很难用手动瞄准。通过装甲板检测就是自瞄系统,己方车辆可自动瞄准敌方车辆装甲板,对敌方造成有效的伤害。大大提高了射击精准度。

功能:检测装甲板的位置并把位置发送给电控

  • 在目标旋转时保证目标的位置的稳定性
  • 系统延时尽可能短
  • 在多目标时,保证打击的一致性

整体架构

文件描述

文件名作用
main.cpp算法主函数,包括多线程处理步骤
caffe_model.cpp自己训练的装甲板贴纸分类模型
cctag_detector.cpp老版圆形贴纸识别圆形的方法
coordinate_process.cpp根据通信协议对最终左边进行处理的方法
detector_methods.cpp装甲板检测的主要方法(包括预处理,逻辑判断等)
serialport.cppLinux 下串口使用的文件
v4l2.cppLinux 下利用 V4L2 来调节摄像头的曝光饱和度等参数。

装甲板检测流程图

基本原理

  1. 如果上一帧的 ROI 标志位为 true 则当前帧的检测区域在上一帧目标的附近,也就是用到了 ROl 方法,如果为 false 则全图搜索,此时将与 ROI 有关的变量全部清零。
  2. 对检测区域内的图进行二值化,也就是预处理,思路就是先将图片用灰度阈值进行二值化,这样子可以将图片中发光的物体给提取出来(装甲板灯条以及日光灯等等),然后再用某种方法将图片中红色或蓝色的区域提取出来,之后再膨胀腐蚀用形态学的方法连通断开的区域,使灯条的形状更加清晰以便于之后的逻辑判断。
    • 一种方法是用 RGB 的红蓝通道相减,根据设定的阈值得到一张二值图,这种方法虽好,但是在识别蓝色的时候,有时候无法排除掉日光灯干扰,该方法,操作简洁,耗时低。
    • 另一种是先将图片转化成 HSV 颜色空间再用通道范围将红色蓝色提取出来,这种方法可以排除掉很多干扰,但是近距离的时候装甲板灯条发白,如果膨胀不到位的话会出现灯条断裂的 情况,膨胀的卷积核过大又会造成预处理耗时过久,因此要权衡一下。
    • 还有一种是在 LAB 下利用 a 通道-b 通道来提取红色。这种方法对红色灯条提取的效果是最好的。但是却极容易把比较暗的,有一点带暗红色的物体都提取出来,容易形成过多的早点。

3.在当前二值图内找到所有的轮廓点,用最小旋转矩形将他们包围,此时得到一个个单独的旋转矩形,然后对旋转矩形的四个顶点重新排序,排除长大于宽的噪点,然后根据装甲板灯条的几何特征首先筛除掉一些旋转矩形。

 if((width/height)>2&&abs(angle)>25&&abs(angle)<70&&){continue;}

4.将这些灯条两两再次组成一个大的旋转矩形(也就是候选装甲板),根据一些限制条件筛除掉不符合条件的装甲板,将剩下的待选装甲板放入一个向量中。

//两两灯条间的角度差不符合的情况
if((abs(angle_1)>5&&abs(angle_1)<20)&&(abs(angle_2)>65&&abs(angle_2)<85)&&((abs(angle_2)>5&&abs(angle_2)<20)&&(abs(angle_1)>65&&abs(angle_1)<85))){
continue;}
//中心距根据灯条的长短分开设置
if(height_1<20||height_2<20){cha=10;}
else{cha=20;}
//进一步根据两条灯条的中心距和灯条面积比例等条件进一步筛选
//一下条件参数是根据640,480分辨率下设定的,不同分辨率条件值可能不一样
if(lantern_cha<cha&&(area_rate>rate2&&area_rate<rate1)) 
{double diameter=sqrt(pow(rectPoint[original_index_i].center.x-			rectPoint[original_index_j].center.x,2)+pow(rectPoint[original_index_i].center.y-rectPoint[original_index_j].center.y,2));if(diameter<35){continue;}//cout<<"d: "<<diameter<<endl;double average_height=(height_1+height_2)*0.5;cout<<"h: "<<average_height<<endl;double  bili=average_height/diameter;if(bili>0.8&&bili<1.8){continue;}if((diameter/average_height>2.5&&diameter/average_height<6)||(diameter/average_height>0.3&&diameter/average_height<2.5)){Point armour_center=(rectPoint[original_index_i].center+rectPoint[original_index_j].center)*0.5;circle(imgOriginal,armour_center,diameter/2,Scalar(0,255,255),1);//紫色Vec3f armour_message(armour_center.x,armour_center.y,diameter);armour.push_back(armour_message);}
}
  1. 经过上述操作后,我们最终把筛选出来的装甲板存入 amour 向量中。

    • 如果向量中没有元素,则说明没有找到目标,只有一个的话则这就是最终选择的装甲板。(只有一个装甲板的情况下不再进一步判断装甲板的真实性,及不再传入用装甲板训练的模型。这样做能保证目标的稳定性和代码的效率)
    • 两个以上装夹板的话就得进行接下去的比较,首先我们把距离图像下半部分及比较近的装甲板存为一组,然后从最近的开始用 caffe 模型进行验证。如果模型给出这个为真,则直接输出。

资源下载地址:https://download.csdn.net/download/sheziqiong/85773209
资源下载地址:https://download.csdn.net/download/sheziqiong/85773209


http://chatgpt.dhexx.cn/article/7lyi0vxW.shtml

相关文章

CFAIyolo5自瞄源码分享

比市面上强的多 阿里云盘分享

FPS 游戏自瞄原理

了解FPS游戏自瞄漏洞 经常玩游戏的朋友&#xff0c;应该知道FPS游戏&#xff0c;例如&#xff1a;穿越火线&#xff0c;逆战等等&#xff0c;他们的特点就是以第一人称视角进行操作人物&#xff0c;屏幕中间会有一个准星&#xff0c;通过准星瞄准敌人进行攻击以达到击杀效果和…

FPS游戏通用自瞄与透视算法详解!!

自瞄算法与实现&#xff1a; 1&#xff1a;首先我们要找到一个敌人的三维坐标。 2&#xff1a;我们还要找到自己的三维坐标。 3&#xff1a;我们还要找到自己的鼠标坐标X与Y&#xff08;这里的鼠标坐标X与Y是角度&#xff0c;X为360&#xff0c;Y正中间为0向上减少到负90度&…

Web前端技术HTML

HTML&#xff08;Hyper Text Markup Language&#xff09; 目录 一、什么是HTML&#xff1f; 二、为什么需要HTML&#xff1f; 三、HTML标签 四、HTML文档结构 五、HTML标签属性 1、标签的语法 2、注意事项 3、常用标签 一、什么是HTML&#xff1f; HTML指的是超文本…

前端技术概述

目录 一、开发框架 1、C/S架构&#xff08;Client-Server&#xff09; 2、B/S架构&#xff08;Browser-Server&#xff09; 二、前端术语 1、渲染 2、Front-end&#xff08;前端开发&#xff09; 3、Back-end&#xff08;后端开发&#xff09; 三、HTML的DOM结构 四、…

如何写前端技术方案文档?

大厂技术 高级前端 Node进阶 点击上方 程序员成长指北&#xff0c;关注公众号 回复1&#xff0c;加入高级Node交流群 前言 百度百科对计算机软件的的定义为&#xff1a;“计算机软件( Software&#xff0c;也称软件)是指计算机系统中的程序及其文档&#xff0c;程序是计算任务…

前端技术体系与发展计划

为什么会想起来整理这么一套东西 最近和很多已经工作了的同学聊天&#xff0c;发现大家都遇到了很多的问题或者说是烦恼。整理了一下&#xff0c;大体可以分为两个大的种类&#xff1a; 关于前端技术体系的问题关于技术能力发展的问题 从这些问题中&#xff0c;我抽出来几个…

前端技术发展历程

&#x1f482; 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 随着互联网的不断发展…

前端技术简介

声明&#xff1a;本文转载自http://www.lvyestudy.com/les_hj/hj_1.1.aspx&#xff0c;如需要了解更多关于前端的知识&#xff0c;请查看该链接 在HTML入门教程学习之前&#xff0c;我们有必要跟大家讲一下网站开发的一些知识。了解这些知识&#xff0c;对你以后网站开发之路如…

2020 年前端技术发展盘点

2020 年已经结束&#xff0c;这一年里面因为疫情&#xff0c;生活和工作中大家都有受到一定的影响。但是在 2020 年里面前端技术的发展依然没有停止脚步。 而我们作为前端开发者&#xff0c;必定需要对技术的更新换代有所了解。虽然我们不需要去学习所有新出来的技术。但是时刻…

前端技术(html)

目录 一、HTML 1. 概念 2. 快速入门 3. 开发工具 HBuilder 3.1 HBuilder介绍 3.2 HBuilder下载 3.3 HBuilder的安装与使用 3.4 使用HBuilder创建项目 4. HTML文档的基本结构 4.1 基本结构 4.2 HTML注释 5. HTML中常用标签 5.1.文本标签 5.2 图片标签 5.3列表标签 5.4…

【狂神说Java】Vue学习笔记01:前端知识体系

本文根据B站【狂神说Java】vue系列视频整理&#xff0c;如需观看视频&#xff0c;请点击链接跳转 【狂神说Java】Vue视频 2、前端知识体系 想要成为真正的“互联网Java全栈工程师”还有很长的一段路要走&#xff0c;其中前端是绕不开的一门必修课。本阶段课程的主要目的就是带…

SUMO安装及环境变量设置

sumo安装 1.打开sumo官网&#xff0c;进入下载界面 2.解压安装包 3.打开bin文件&#xff0c;创建sumo-gui和netedit快捷方式 SUMO环境变量配置 1.右击我的电脑&#xff0c;点击属性 2.点击高级系统设置&#xff0c;环境变量 3.在用户变量的path&#xff0c;加入以下变量 4.…

Python pip保姆级环境变量设置

1.打开系统中的高级系统设置 2.点击环境变量 3.在系统变量区域&#xff0c;选中path&#xff0c;点击编辑进入编辑页面。 4.将python Scripts文件夹所在位置复制粘贴到变量值中&#xff0c;注意名称之间有分号。 5.winr cmd回车&#xff0c;输入pip出现以下页面说明设置成功。…

MySQL数据库环境变量设置

1、鼠标左键&#xff0c;点击设置 2、出现一个框&#xff0c;在框里&#xff0c;填写&#xff0c;高级系统设置&#xff0c;确定 3、打开了高级系统设置&#xff0c;点击红圈圈着的“环境变量” 4、出现一个新的小弹框&#xff0c;点击path&#xff0c;&#xff08;路径的意思&…

Mac设置环境变量

环境变量是电脑操作系统中常用的一些变量&#xff0c;作用类似于将一些常用命令所在的文件夹位置预先告诉操作系统&#xff0c;当以后需要用到这些命令时&#xff0c;操作系统就自动来这些位置取。 例如&#xff0c;常见的Java开发中配置的相关环境变量&#xff1a;PATH&#…

python环境变量设置(win10为例)

C站发表的第一个文章啊&#xff0c;话就不多说了。 &#xff08;PS&#xff1a;我也是小白&#xff0c;注册C站第一天&#xff0c;冒个泡&#xff09; win10教程&#xff08;只有win10电脑&#xff09; 先放一张我自己总结的教程 &#xff08;PS&#xff1a;应该够清楚了&a…

npm环境变量设置

使用npm命令提示: npm 不是内部或外部命令&#xff0c;也不是可运行的程序 在安装nodejs时候&#xff0c;有时候我们会把它安装在d盘或别的盘时&#xff0c;经常会遇到npm环境变量没有配好&#xff0c;需要自己手动去配置。 在安装完nodejs后输入node --version查看安装是否成功…

Centos7环境变量设置

Centos7环境变量设置 最近&#xff0c;我从cnaaa.com上购买了云服务器&#xff0c;开通了centos系统。 1、环境变量的含义 程序&#xff08;操作系统命令和应用程序&#xff09;的执行都需要运行环境&#xff0c;这个环境是由多个环境变量组成的。 2、环境变量的分类 1&am…