基于openCV实现的单目相机行人和减速带检测

概述

在计算机视觉项目中,相机标定是一项至关重要的任务,因为它可以校正相机内部参数,消除因镜头畸变等因素导致的图像失真,从而提高后续图像处理和分析的精度。在这个项目中,相机标定的核心功能集成在名为`calibration.py`的Python脚本中,涵盖了从采集原始图像、进行相机标定计算到应用畸变矫正算法的全过程。特别地,针对鱼眼相机的畸变校正遇到了一些挑战,而其他类型的相机则能够顺利完成标定流程。

在这里插入图片描述

使用方法

用户在运行calibration.py时,会遵循清晰的操作指南逐步完成整个标定过程。首先,程序会在用户的指示下自动或选择性地清空标定板图片文件夹,以便收集新的图像数据。接下来,用户可以通过capture阶段预设拍照数量,确保获取足够丰富的标定样本。这些样本将用于后续的calibrate阶段,其中程序会根据拍摄的标定板图像精确估计相机的内参和畸变系数,并将不同类型的相机标定结果分别写入各自的配置文件中。最后,undistort阶段允许用户将原始图像应用所获得的标定参数进行去畸变处理。

关于标定板的选择和使用,作者在个人博客“雨白的博客小屋”中有详细介绍,并指明了本项目采用的是具有11列和8行黑白棋盘格图案的标定板,每格宽度为1cm。使用者需确保在程序中正确设置标定板参数,例如在calibration.py中声明为board = Board(11,8,10),若使用不同规格的标定板,则务必相应修改这些参数。

随着时间的推进,项目在2023年5月14日进行了重要更新,将部分标定相关的辅助函数拆分并整合到utils/calibrate模块中,以方便其他程序调用。同时,虽然提到了新增了生成鸟瞰图的功能并通过birdeye.py实现,但这一功能在后期已被移除。值得注意的是,鸟瞰图转化过程中,采用了以标定板左上角为基础,并向左上方向平移200mm的方式来定义标定板平面坐标系的原点。

另一方面,项目还包含了单应矩阵标定的内容。为了实现空间坐标与图像坐标的映射关系,作者巧妙地利用宿舍内的瓷砖作为特征点进行标定。通过OpenCV中的findHomography函数,可以从多个匹配点对中计算出单应矩阵H。然而,此处作者强调了一个易忽视的细节:findHomography得到的H矩阵实际上只满足了一个近似的线性变换关系,它并未直接给出标准齐次坐标形式的转换,因此在实际应用中需要额外处理,将其转换为符合齐次坐标的表示形式。用户通过运行getHomography.py脚本来拍照、标记像素点并进行标定,进而利用得到的H矩阵,配合getDistance.py进行基于像素点的测距实验。

结果

在这里插入图片描述

在目标检测方面,随着项目的深入,于2023年5月29日开始尝试使用YOLOv7框架训练自定义数据集。作者精心组织了数据集的构建流程,其中包括将待标注的图片放置于"data/images"文件夹,使用labelimg工具进行精细标注,将标注结果存放在"data/labels"文件夹。随后,依据具体指导文档,在YOLOv7项目目录下运行data_process.py脚本,将原始数据划分为训练集、验证集等,并生成相应的路径文件。

更新

在此过程中,作者列举了一系列训练过程中踩过的“坑”,为后续开发者提供了宝贵的经验教训:

  1. 对于train.py中的config文件,当尝试使用预训练模型时,曾出现"assets"的KeyError,这通常指向预训练模型路径的错误,提醒用户仔细检查配置文件中的路径设置。
  2. 在train.txt等文件中记录的路径建议使用绝对路径,可以通过Python内置的os模块获取当前工作目录并结合os.join()函数拼接路径,确保程序运行时能找到正确的文件位置。
  3. 若计划使用CPU而非GPU进行训练,需在utils/loss.py文件中将涉及设备分配的部分从"gpu: 0"改为"cpu: 0"。
  4. 当利用预训练权重初始化模型训练新类别时,必须在cfg/training/yolov7.yaml文件中将nc参数修改为对应的类别数量。
  5. 强烈建议在yaml配置文件中避免使用中文字符,以免引发编码错误。

代码

"""
This .py is to compute H between two planes:image plane and ground plane
(本程序实现:求解成像平面和大地平面的单应矩阵)
"""import cv2
import numpy as np
from utils.calibrate import *
from utils.capture import Capture
from utils.opFile import writeHomographyToFile
from configs.Intrinsic_normal import cameraMatrix,distCoeff
from utils.measureDistance import getDistance# mouse callback function
def click_corner(event, x, y, flags, param):if event == cv2.EVENT_LBUTTONDOWN:xy = "%d,%d" % (x, y)cv2.circle(img, (x, y), 1, (255, 0, 0), thickness = -1)cv2.putText(img, xy, (x, y), cv2.FONT_HERSHEY_PLAIN,1.0, (0,0,0), thickness = 1)print(x,y)dist = round(getDistance(x,y),5)print("dist=",dist,"m")if __name__ == '__main__':img = cv2.imread("./groundImg/61.png")cv2.destroyAllWindows()# click the cornercv2.namedWindow("groundBoard")cv2.setMouseCallback("groundBoard",click_corner)while(1):cv2.imshow("groundBoard", img)key = cv2.waitKey(1) & 0xffif key == ord('q') or key == ord('Q'):break

此外,项目还进行了技术创新和优化,比如加入了CBAM(Convolutional Block Attention Module)注意力机制,增强了网络对目标特征的学习能力;并且尝试了二值化处理等图像预处理手段,旨在提升模型性能。

然而,在最终的试验结果展示中,尽管已经付出了诸多努力,但目标检测在视频截图中的远程表现并不理想。作者推测这可能是由于相机本身的分辨率限制,导致在较远距离处捕捉到的物体特征模糊不清,从而影响了模型的训练效果和预测精度。这也提示我们在实际应用场景中,除了算法设计和训练策略之外,硬件设备的选择同样至关重要。

最后,计算机视觉、图像处理、毕业辅导、作业帮助、代码获取,远程协助,代码定制,私聊会回复!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/747983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

还原wps纯粹的编辑功能

1.关闭稻壳模板: 1.1. 启动wps(注意不要乱击稻壳模板,点了就找不到右键菜单了) 1.2. 在稻壳模板选项卡右击:选不再默认展示 2.关闭托盘中wps云盘图标:右击云盘图标/同步与设置: 2.1.关闭云文档同步 2.2.窗口选桌面应用…

Vue2+ElementUI表单、Form组件的封装

Vue2ElementUI表单、Form组件的封装 :引言 在 Vue2 项目中,ElementUI 的 el-form 组件是常用的表单组件。它提供了丰富的功能和样式,可以满足各种需求。但是,在实际开发中,我们经常会遇到一些重复性的需求&#xff0c…

16.WEB渗透测试--Kali Linux(四)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:15.WEB渗透测试--Kali Linux(三)-CSDN博客 1.crunch简介与使用 C…

分布式CAP理论

CAP理论:一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)。是Eric Brewer在2000年提出的,用于描述分布式系统基本性质的定理。这三个性质在分布式系统…

FPGA静态时序分析与约束(一)、理解亚稳态

系列文章目录 FPGA静态时序分析与约束(二)、时序分析 FPGA静态时序分析与约束(三)、读懂vivado时序报告 文章目录 系列文章目录前言一、概述一、何为亚稳态?二、图解亚稳态三、什么时候亚稳态会导致系统失效&#xff…

k8s部署hadoop

(作者:陈玓玏) 配置和模板参考helm仓库:https://artifacthub.io/packages/helm/apache-hadoop-helm/hadoop 先通过以下命令生成yaml文件: helm template hadoop pfisterer-hadoop/hadoop > hadoop.yaml用kube…

Unity PS5开发 天坑篇 之 申请开发者与硬件部署01

腾了好几天终于把PS5开发机调试部署成功, 希望能帮到国内的开发者, 主机游戏PlayStation/Nintendo Switch都是比较闭塞的,开发者账号是必须的。 开发环境有两个部分,一是DEV Kit 开发机, TEST Kit测试机两部分组成,二是Unity的支持库(安装后…

最新开源解密版TwoNav网址导航系统源码

源码简介 2024最新开源解密版TwoNav网址导航系统源码去授权破解版 内置二十多套主题模板。 已去授权,最新开源解密版。TwoNav 是一款开源的书签(导航)管理程序,使用PHP SQLite 3开发,界面简洁,安装简单&…

FFmepg--音频编码流程--pcm编码为aac

文章目录 基本概念流程apicode(核心部分) 基本概念 从本地⽂件读取PCM数据进⾏AAC格式编码,然后将编码后的AAC数据存储到本地⽂件。 PCM样本格式:未经压缩的⾳频采样数据裸流 参数: Sample Rate : 采样频率Sample Size : 量化位数Number o…

Matlab进阶绘图第45期—蝴蝶气泡图

蝴蝶气泡图是一种特殊的柱泡图/气泡柱状图。 蝴蝶图一般由左右两个水平柱状图组合而成,其形如蝴蝶展翅,可以很直观地展示两种数据直接的差异。 而蝴蝶气泡图则是在两个水平柱状图每根柱子外侧额外添加大小不同的气泡,用于表示另外一个数据变…

使用IDEA2023创建传统的JavaWeb项目并运行与调试

日期:2024-0312 作者:dusuanyun 文档环境说明: OS:Deepin 20.9(Linux) JDK: OpenJDK21 Tomcat:10.1.19 IDEA: 2023.3.4 (Ultimate Edition) 本文档默认已经安装JDK及环境变量的配置。 关键词…

单片机设计-超声波视力保护仪的设计与实现

项目介绍 技术:C语言、单片机等 本设计利用超声波技术检测眼睛与书本的距离,调整看书位置,通过光敏检测判断环境光线强度是否适合阅读,并通过定时器设定阅读时长,以此解决人们由于看书姿势的错误,阅读环境…

R语言数据挖掘-关联规则挖掘(1)

一、分析目的和数据集描述 要分析的数据是美国一区域的保险费支出的历史数据。保险费用数据表的每列分别为年龄、性别、体重指数、孩子数量、是否吸烟、所在区域、保险收费。 本文的主要目的是分析在年龄、性别、体重指数、孩子数量、是否吸烟、所在区域中这些因素中&#xf…

webpack5零基础入门-8清空前次打包文件与处理图标字体资源

1.配置output中的clean属性为true output: {/**文件输出路径 绝对路径*///__dirname 表示当前文件的文件夹目录path: path.resolve(__dirname, dist),//所有文件的输出目录/**文件名 */filename: static/js/dist.js,//入口文件输出文件名clean: true,//在打包前将path整个目录内…

SSM SpringBoot vue智能手机参数分析平台

SSM SpringBoot vue智能手机参数分析平台 系统功能 首页 图片轮播 新闻资讯 手机信息 手机百科 登录注册 个人中心 后台管理 登录注册 个人中心 手机百科管理 用户管理 手机对比管理 配置管理 新闻资讯管理 手机信息管理 对比信息管理 我的收藏管理 开发环境和技术 开发语言…

安卓国产百度网盘与国外云盘软件onedrive对比

我更愿意使用国外软件公司的产品,而不是使用国内百度等制作的流氓软件。使用这些国产软件让我不放心,他们占用我的设备大量空间,在我的设备上推送运行各种无用的垃圾功能。瞒着我,做一些我不知道的事情。 百度网盘安装包大小&…

爬虫 某物流

目标地址 url "https://api.jdl.com/aging/feeInquiryNewByJDL" 加密参数 ciphertext和data 搜关键字ciphertext跟着栈走 很明显的DES加密 window globalconst e require(jsencrypt); // const e require(JSEncrypt) // e r(775).JSEncrypt // const t requi…

《ARM汇编与逆向工程》读书心得与实战体验

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 📘 一、引言 📝 二、…

信雅纳网络测试的二次开发集成:XOA(Xena Open-Source Automation)开源自动化测试

目录 XOA是什么 XOA CLI XOA Python API ​XOA Python Test Suite/测试套件 XOA Converter Source Code XOA是什么 XOA(Xena Open-Source Automation)是一个开源的测试自动化框架,追求“高效、易用、灵活”的跨操作系统的开发框架。能…

android studio的布局没有提示之SDK不匹配

我新建了一个项目,然后突然发现布局没有提示了: 我看了下我的build.gradle 我直接修改compileSdkVersion为30就能正常使用了