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

这篇具有很好参考价值的文章主要介绍了基于openCV实现的单目相机行人和减速带检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

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

基于openCV实现的单目相机行人和减速带检测,数码相机,opencv,人工智能,减速带检测,单目测距

使用方法

用户在运行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进行基于像素点的测距实验。

结果

基于openCV实现的单目相机行人和减速带检测,数码相机,opencv,人工智能,减速带检测,单目测距

在目标检测方面,随着项目的深入,于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 corner
    cv2.namedWindow("groundBoard")
    cv2.setMouseCallback("groundBoard",click_corner)
    
    while(1):
        cv2.imshow("groundBoard", img)
        key = cv2.waitKey(1) & 0xff
        if key == ord('q') or key == ord('Q'):
            break

    

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

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

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

到了这里,关于基于openCV实现的单目相机行人和减速带检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV实现求解单目相机位姿

            单目相机通过对极约束来求解相机运动的位姿。参考了ORBSLAM中单目实现的代码,这里用opencv来实现最简单的位姿估计.    首先通过ORB特征提取,获取两幅图像的匹配度,我将其连线出来的效果:   RANSAC的算法原理可以google,很容易理解。先看看ORBSLAM中的实现:

    2024年02月06日
    浏览(46)
  • 【计算机视觉】OpenCV实现单目相机标定

    文章目录 单目相机标定(基于Python OpenCV) 1.上期填坑 2.单目相机标定 2.1 数据采集 2.2 角点提取 2.3 参数求解 2.4 参数评估(重投影误差) 2.5 相机位姿(棋盘位姿)可视化 2.6 同Matlab标定结果比较 在开始本篇博客之前,先填一下上一篇博客【计算机视觉】基于ORB角点+RANSAC算法实现图像

    2023年04月18日
    浏览(62)
  • 基于opencv深度学习,交通目标检测,行人车辆检测,人流统计,交通流量检测

    文章目录 0 前言+ 1. 目标检测概况+ 1.1 什么是目标检测?+ 1.2 发展阶段 2. 行人检测+ 2.1 行人检测简介+ 2.2 行人检测技术难点+ 2.3 行人检测实现效果+ 2.4 关键代码-训练过程 最后 设计项目案例演示地址: 链接 毕业设计代做一对一指导项目方向涵盖: 1.1 什么是目标检测? 目标检

    2024年02月04日
    浏览(58)
  • 【opencv】传统目标检测:HOG+SVM实现行人检测

    传统目标分类器主要包括Viola Jones Detector、HOG Detector、DPM Detector,本文主要介绍HOG Detector与SVM分类器的组合实现行人检测。 HOG(Histograms of Oriented Gradients:定向梯度直方图)是一种基于图像梯度的特征提取方法,被广泛应用于计算机视觉和机器学习领域。由Navneet Dalal和Bill T

    2024年02月12日
    浏览(43)
  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之四 简单行人人体检测效果

    目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之四 简单行人人体检测效果 一、简单介绍 二、简单行人人体检测效果实现原理 三、简单行人人体检测效果案例实现简单步骤 四、注意事项 Python是一种跨平台的计算机程序设计语言。是一种面向对

    2024年04月26日
    浏览(64)
  • 单目相机测距(3米范围内)二维码实现方案(python代码 仅仅依赖opencv)

    总体思路:先通过opencv 识别二维码的的四个像素角位置,然后把二维码的物理位置设置为 ,相当于这是一个任意找的物体上的四个点,对应的我们找到了在图像中对应的像素坐标。这就解决了世界坐标系与像素坐标系之间的对应问题,然后再通过PNP求解的方式,就可以通过

    2024年02月04日
    浏览(47)
  • 自动驾驶:低阶可部署的单目测距算法-基于YOLO与透视变换

    一、开发环境 部署平台:英伟达的Jetson Nano 环境:Linux + ROS 语言:C++ 设备:1920*1080像素的摄像头、开发板。 模型:yolo-v8s 二、单目测距实现思路 0、标定相机和车辆(假设已经标定完成) 1、通过yolo对目标检测,获得ROI区域 2、根据ROI计算车辆和地面接触的中心点 3、根据车

    2024年02月02日
    浏览(47)
  • 计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)

    该项目一个基于深度学习和目标跟踪算法的项目,主要用于实现视频中的目标检测和跟踪。 该项目使用了 YOLOv5目标检测算法和 DeepSORT 目标跟踪算法,以及一些辅助工具和库,可以帮助用户快速地在本地或者云端上实现视频目标检测和跟踪! 教程博客_传送门链接-------单目测

    2024年02月08日
    浏览(54)
  • 棋盘格测距-单目相机(OpenCV/C++)

    1’ 通过cv::findChessboardCorners寻找棋盘格角点 2‘ 用cv::solvePnP计算旋转向量rvec和平移向量tvec 3’ 通过公式计算相机到棋盘格的距离   已完成单目相机标定的情况下: (可以参考  虽然是我很久之前写的python的,但实现是没啥问题) 需要以下内容: 1、已知相机的内参矩阵 c

    2024年02月08日
    浏览(49)
  • opencv 单目相机pnp测距(Cpp)

    单目相机pnp测距是通过单目相机拍摄的一张2d图片,来测量图片中某物与相机的距离。 需要知道被测物的实际尺寸 测距前 需要先 相机标定 ,需要使用哪个相机进行测距就标定哪个。一旦换成了其他相机, 就要重新标定最终相机。 为什么要相机标定? 相机标定是为了得到从

    2024年02月04日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包