[openCV]基于拟合中线的智能车巡线方案V1

import cv2 as cv
import os
import numpy as np# 遍历文件夹函数
def getFileList(dir, Filelist, ext=None):"""获取文件夹及其子文件夹中文件列表输入 dir:文件夹根目录输入 ext: 扩展名返回: 文件路径列表"""newDir = dirif os.path.isfile(dir):if ext is None:Filelist.append(dir)else:if ext in dir[-3:]:Filelist.append(dir)elif os.path.isdir(dir):for s in os.listdir(dir):newDir = os.path.join(dir, s)getFileList(newDir, Filelist, ext)return Filelistdef mid(follow, mask):half = follow.shape[1] // 2 # 从下往上扫描赛道,最下端取图片中线为分割线for y in range(follow.shape[0] - 1, -1, -1):if (mask[y][0:half] == np.zeros_like(mask[y][0:half])).all(): # 分割线左端无赛道left = 0 # 取图片左边界为赛道左边界else:left = np.average(np.where(mask[y][0:half] == 255)) # 计算分割线左端平均位置if (mask[y][half:follow.shape[1]] == np.zeros_like(mask[y][half:follow.shape[1]])).all(): # 分割线右端无赛道right = follow.shape[1] # 取图片右边界为赛道右边界else:right = np.average(np.where(mask[y][half:follow.shape[1]] == 255)) + half # 计算分割线右端平均位置mid = (left + right) // 2 # 计算拟合中点half = int(mid) # 递归,从下往上确定分割线follow[y, int(mid)] = 255 # 画出拟合中线if y == 360: # 设置指定提取中点的纵轴位置mid_output = int(mid)cv.circle(follow, (mid_output, 360), 5, 255, -1) # opencv为(x,y),画出指定提取中点error = follow.shape[1] // 2 - mid_output # 计算图片中点与指定提取中点的误差return follow, error # error为正数右转,为负数左转n = -1
# 存放图片的文件夹路径
path = "./B"
imglist = getFileList(path, [])
for imgpath in imglist:n += 1if n < 63:continueimg = cv.imread(imgpath)# HSV阈值分割img_hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)mask = cv.inRange(img_hsv, np.array([43, 60, 90]), np.array([62, 255, 255]))follow = mask.copy()follow, error = mid(follow, mask)print(n, f"error:{error}")cv.imshow("img", img)cv.imshow("mask", mask)cv.imshow("follow", follow)cv.waitKey(0)cv.destroyAllWindows()
相关文章:
[openCV]基于拟合中线的智能车巡线方案V1
import cv2 as cv import os import numpy as np# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir:文件夹根目录输入 ext: 扩展名返回: 文件路径列表"""newDir d…...
MyBatis-Plus 和达梦数据库实现高效数据持久化
一、添加依赖 首先,我们需要在项目的 pom.xml 文件中添加 MyBatis-Plus 和达梦数据库的依赖: <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifac…...
已注销【888】
元神密码 - 飞书云文档 (feishu.cn)...
Ceph错误汇总
title: “Ceph错误汇总” date: “2020-05-14” categories: - “技术” tags: - “Ceph” - “错误汇总” toc: false original: true draft: true Ceph错误汇总 1、执行ceph-deploy报错 1.1、错误信息 ➜ ceph-deploy Traceback (most recent call last):File "/us…...
DataTable过滤某些数据
要过滤DataTable中的某些数据,可以使用以下方法: 使用Select方法:可以使用DataTable的Select方法来筛选满足指定条件的数据行。该方法接受一个字符串参数作为过滤条件,返回一个符合条件的数据行数组。 DataTable filteredTable …...
JAVASE---继承和多态
继承 比如,狗和猫,它们都是一个动物,有共同的特征,我们就可以把这种特征抽取出来。 像这样把相同的可以重新放到一个类里面,进行调用,这就是继承。 概念 继承(inheritance)机制:是面向对象程…...
Centos7升级gcc、g++版本(转载)
Centos7默认的 gcc版本是 4.8.5 默认使用yum install gcc安装出来的gcc版本也是是4.8.5。 1.首先查看自己的 gcc 版本 gcc -v g -v如果出现:bash: g: 未找到命令... 则安装g:遇到暂停时,输入y继续安装 yum install gcc-c然后输入…...
第一章:继承
系列文章目录 文章目录 系列文章目录前言继承的概念及定义继承的概念继承定义定义格式继承关系和访问限定符继承基类成员访问方式的变化 基类和派生类对象赋值转换(公有继承)继承中的作用域派生类的默认成员函数继承与友元继承与静态成员不能被继承的类复…...
git面试题
文章目录 git经常用哪些指令git出现代码冲突怎么解决你们团队是怎么管理git分支的如何实现Git的免密操作 git经常用哪些指令 产生代码库 新建一个git代码库 git init下载远程项目和它的整个代码历史 git clone 远程仓库地址配置 显示配置 git config --list [--global]编辑配置…...
Github Copilot在JetBrains软件中登录Github失败的解决方案
背景 我在成功通过了Github Copilot的学生认证之后,在VS Code和PyCharm中安装了Github Copilot插件,但在PyCharm中插件出现了问题,在登录Github时会一直Retrieving Github Device Code,最终登录失败。 我尝试了网上修改DNS&…...
使用 github 同步谷歌浏览器书签
想必使用谷歌浏览器Chrome的用户一定非常头疼的一件事就是:账户不能登录,书签收藏夹不能同步,换一台电脑书签收藏夹没有了! 下面教大家一招亲测有效适用的方法解决书签同步问题,在任何电脑都可以同步了 1、去下载谷歌…...
Eclipse进行debug
目录 基本步骤三种执行方式 -- 键盘快捷键variables面板移除debug过的项目通过eclipse调用具有软件界面的项目进行debug各个variable颜色具有的意义 基本步骤 点击eclipse右上角debug按钮 调出debug面板 点击小蜘蛛图标(不是点绿色三角的Run) 此时会进…...
13-5_Qt 5.9 C++开发指南_基于信号量的线程同步_Semaphore
文章目录 1. 信号量的原理2. 双缓冲区数据采集和读取线程类设计3. QThreadDAQ和QThreadShow 的使用4. 源码4.1 可视化UI设计框架4.2 qmythread.h4.3 qmythread.cpp4.4 dialog.h4.5 dialog.cpp 1. 信号量的原理 信号量(Semaphore)是另一种限制对共享资源进行访问的线程同步机制…...
golang使用泛型实现mapreduce操作
1.使用面向对象的方式写 package streamimport ("fmt""log""reflect""sort""strconv""strings" )type Stream[T any] struct {data []TkeyBy stringsortByNum stringsortByStr []string }func FromElem…...
2023华数杯数学建模C题思路分析 - 母亲身心健康对婴儿成长的影响
# 1 赛题 C 题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一,她不仅为婴儿提供营养物质和身体保护, 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况,如抑郁、焦虑、 压力等,可能会对婴儿的认知、情…...
【汇总】解决Ajax请求后端接口,返回ModelAndView页面不跳转
【汇总】解决Ajax请求后端接口,返回ModelAndView不跳转 问题发现问题解决方法一:直接跳转到指定URL(推荐)方法二:将返回的html内容,插入到页面某个元素中方法三:操作文档流方法四:使…...
网络安全进阶学习第九课——SQL注入介绍
文章目录 一、什么是注入二、什么是SQL注入三、SQL注入产生的原因四、SQL注入的危害五、SQL注入在渗透中的利用1、绕过登录验证:使用万能密码登录网站后台等。2、获取敏感数据3、文件系统操作4、注册表操作5、执行系统命令 六、如何挖掘SQL注入1、SQL注入漏洞分类按…...
一个计算机专业的学生数据结构这门课学到什么程度才能算学的还不错?
数据结构之所以重要是因为它处于算法中的基础地位,与解决实际问题关系密切;而之所以不重要是因为课本上能学到的所有实现都已经有人造过轮子了,甚至已经作为很多语言的标准API存在了。 换句话来说,在以后的编码生涯中,…...
[语义分割] ASPP不同版本对比(DeepLab、DeepLab v1、DeepLab v2、DeepLab v3、DeepLab v3+、LR-ASPP)
1. 引言 1.1 本文目的 本文主要对前段时间学习的 ASPP 模块进行对比,涉及到的 ASPP 有: ASPP in DeepLab v2,简称 ASPP v2ASPP in DeepLab v3,简称 ASPP v3ASPP in DeepLab v3,简称 ASPP v3ASPP in MobileNet v3&am…...
anaconda创建虚拟环境在D盘
【看一看就行,又是挺水的一期(每一季都掺和一点子水分也挺好)】 一、创建: conda create --prefixD:\python37\py37 python3.7 这下就在D盘了: 二、激活刚刚那个环境: activate D:\pyhton37\py37 &…...
第 29 课:任务页筛选方案预设与快捷视图
第 29 课:任务页筛选方案预设与快捷视图 这一课,我们继续沿着任务管理页主线往下走,把它从“能筛选”推进到“能复用工作台”: 让用户把当前筛选条件保存成方案,以后可以一键切回。 这一步很像真实后台系统里常见的&am…...
你的神经网络真的在看对的地方吗?用Grad-CAM++和ScoreCAM给你的模型做个“视力检查”
神经网络视觉诊断:用Grad-CAM和ScoreCAM揭示模型注意力机制 当我们在医院接受视力检查时,医生会通过一系列测试判断我们的视觉系统是否存在问题。同样地,作为算法工程师,我们也需要一套可靠的诊断工具来检查神经网络的"视力&…...
大语言模型技术指南:temperature、top-k、top-p、repeat penalty 到底怎么调?生成参数实战详解
大语言模型技术指南:temperature、top-k、top-p、repeat penalty 到底怎么调?生成参数实战详解 前面几篇,我们已经把这条主线往前推进到了这里:Transformer 为什么能成为大模型基础架构预训练到底在学什么SFT、RLHF、DPO 这类对齐…...
▲D2D通信中基于Qlearning强化学习算法的联合资源分配与功率控制算法matlab仿真
目录 📶1.引言 🧠2.系统模型 2.1 网络拓扑 2.2 信号与干扰模型 2.3 容量与吞吐量 2.4 优化目标 ✅3.基于Q学习的联合资源分配与功率控制算法原理 3.1 状态空间定义 3.2 动作空间定义 3.3 奖励函数设计 3.4 Q值更新规则 📚4.MATLA…...
别再只调占空比了!舵机脉冲频率从50Hz到600Hz,实测告诉你哪些频率会让舵机‘罢工’
舵机控制进阶指南:突破50Hz限制的频率优化实战 第一次用Arduino控制舵机时,我也以为只要调准1ms到2ms的脉宽就够了。直到在机器人比赛现场,亲眼看到价值上万的机械臂因为频率设置不当而"跳机械舞"——那一刻才明白,舵机…...
MIPI-DSI协议解析:从物理层到应用层的LCD驱动实践
1. MIPI-DSI协议基础:显示接口的"高速公路" 第一次接触MIPI-DSI时,我盯着开发板上那几根细如发丝的走线发愣——这么少的线路怎么传输高清图像?后来才明白,这正是MIPI-DSI的精妙之处。作为移动设备显示接口的事实标准&…...
CSS如何实现Less颜色函数自动计算渐变_使用lighten与darken实现视觉反馈
lighten() 和 darken() 按 HSL 的 L 分量线性调整亮度,非像素级明暗处理;需确保输入为 color 类型、慎用于高饱和色、避免链式调用,并配合 saturate 等增强视觉反馈。lighten() 和 darken() 在 Less 中怎么写才不翻车Less 的 lighten() 和 da…...
【Python基础20讲】第01章:Python 环境搭建与第一个程序
博主智算菩萨,专注于人工智能、Python编程、音视频处理及UI窗体程序设计等方向。致力于以通俗易懂的方式拆解前沿技术,从零基础入门到高阶实战,陪伴开发者共同成长。目前已开设五大技术专栏,累计发布多篇原创技术文章,…...
13 火箭回收番外篇:以逆向研发之智铸国之重器——数据见证硬核技术赋能国家航天强国战略
论火箭回收的逆向思维落地方法 番外篇:以逆向研发之智铸国之重器——数据见证硬核技术赋能国家航天强国战略 摘要 本番外篇立足火箭回收逆向研发全体系核心成果,结合量化震撼数据、多维对比表格,站在国家航天战略、国防安全、科技自主、产业升…...
在安卓Termux上部署Kali NetHunter:无需Root的完整实战指南
1. 为什么选择Termux部署Kali NetHunter? 几年前我第一次尝试在安卓手机上运行Kali Linux时,发现绝大多数教程都要求解锁Bootloader和Root权限。这不仅会让手机失去保修,还存在安全风险。直到发现Termux这个神器,才真正实现了零风…...
