基于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,一经查实,立即删除!

相关文章

redis的安装与string类型

1. redis的安装 1.1 升级gcc版本 因为centos7.x的gcc版本还是4.8.5,而编译指定的版本是需要5.3以上。 环境部署与安装scl源 yum install gcc cmake -y --部署安装环境 yum install centos-release-scl scl-utils-build -y --安装scl源 安装gcc新版本 yum -y ins…

还原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年提出的,用于描述分布式系统基本性质的定理。这三个性质在分布式系统…

SQLZoo:SELECT from WORLD Tutorial/zh

name continent area population gdp Afghanistan Asia 652230 25500100 20343000000 Albania Europe 28748 2831741 12960000000 … name:國家名稱 continent:洲份 area:面積 population:人口 gdp:國內生產總值 Country Profile 在這教程中,我們會使用SELECT語句&…

python pytest 最简单的接口自动化测试框架

最近由于工作的原因,需要开发一个接口自动化测试框架,使用pytest框架、数据驱动,并展示直观的测试报告。 具体的开发过程如下: 安装必要的库: pytest:用于编写和运行测试用例。requests:用于发…

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

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

Jsch实践(三):如何使用Jsch的ChannelShell类,在远程服务器上执行脚本命令?

如何使用Jsch的ChannelShell类,在远程服务器上执行脚本命令 要使用JSch的ChannelShell类在远程服务器上执行脚本命令,你需要创建一个shell通道,然后向这个通道的输入流发送命令,并读取输出流来获取命令的响应。下面是一个示例代码…

k8s部署hadoop

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

apache和tomcat的优化总结概述

一. tomcat 的优化 Tomcat 作为一款广泛使用的 Java Web 应用服务器,其性能优化可以从以下几个方面进行: ① 内存配置优化: 调整JVM堆内存大小(-Xms和-Xmx参数),以确保Tomcat在处理大量并发请求时有足够…

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

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

vue3 ref 和 reactive 区别

Vue 3 引入了两种新的响应式 API:ref 和 reactive。这两个 API 都用于创建响应式数据,但它们的使用场景和行为有所不同。 ref 用途:ref 用于创建基本数据类型的响应式引用,如字符串、数字、布尔值等。 使用方式:在模…

最新开源解密版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语言、单片机等 本设计利用超声波技术检测眼睛与书本的距离,调整看书位置,通过光敏检测判断环境光线强度是否适合阅读,并通过定时器设定阅读时长,以此解决人们由于看书姿势的错误,阅读环境…

Android11 FallbackHome启动和关闭流程分析

Android 7.0引入了新特性:Direct Boot Mode,设备启动后进入的一个新模式,直到用户解锁(unlock)设备此阶段结束。在这个模式下,系统调用 resolveHomeActivity 找到的是FallbackHome ,而不是我们的…

Python keyword-only参数

keyword-only 参数是Python 3中引入的一种新的参数语法。它允许您在定义函数时强制要求某些参数必须以关键字参数的形式传递。这种机制有助于提高代码的可读性和可维护性。 以下是 keyword-only 参数的语法: def function_name(arg1, arg2, *, kwarg1, kwarg2value):# 函数体…