基于深度学习的车辆测距识别 yolov8双目测距 yolov8+sgbm(原理+代码)

张开发
2026/4/15 6:42:15 15 分钟阅读

分享文章

基于深度学习的车辆测距识别 yolov8双目测距 yolov8+sgbm(原理+代码)
YOLOv8结合SGBM立体匹配算法进行双目测距的工作流程和原理主要包括以下几个核心步骤往期热门博客项目回顾计算机视觉项目大集合改进的yolo目标检测-测距测速路径规划算法图像去雨去雾目标检测测距项目交通标志识别项目yolo系列-重磅yolov9界面-最新的yolo姿态识别-3d姿态识别深度学习小白学习路线图像分类正文开始 发车------------------双目测距基本原理双目测距是基于立体视觉技术利用两个平行放置的摄像头捕捉同一场景的两幅稍有偏移的图像。通过比较两幅图像中相同物理点在左右相机图像上的像素坐标差异视差结合相机的基线长度和焦距信息可以计算出相应点在三维空间中的深度信息。SGBMSemiglobal Block Matching算法SGBM是OpenCV库中用于立体匹配的一种高效算法它基于半全局匹配思想在优化视差图的过程中考虑局部连续性和全局一致性。SGBM通过对左右图像块进行匹配找出最优视差值生成一个精确的视差图这个视差图的每个像素值代表了该像素在三维空间中的深度信息。工作流程相机标定使用棋盘格或者其他标定图案对双目相机进行内外参数标定获取相机的焦距、主点坐标、畸变系数以及两个相机之间的相对位置关系旋转和平移矩阵。图像校正与同步分别从左右相机获取图像并对图像进行校正消除镜头畸变。确保两幅图像的同步采集以便后续的立体匹配。SGBM立体匹配应用SGBM算法对校正后的左右图像进行匹配生成视差图。深度图计算根据视差图和已知的相机参数通过三角测距原理计算出每个像素点对应的深度值生成深度图。YOLOv8目标检测利用YOLOv8在左相机图像上进行目标检测识别出图像中的物体位置及其边界框。融合深度信息将YOLOv8检测到的目标边界框中心点或整个框范围内的深度信息提取出来结合深度图的数据计算出目标物体的精确距离。结合应用场景当YOLov8检测到某个目标物体时可以在深度图中查找该物体所在区域的深度信息进而确定目标物体相对于相机的距离。通过以上流程YOLOv8与SGBM立体匹配算法的结合实现了实时的深度感知和目标识别功能广泛应用于自动驾驶、机器人导航、无人机避障等领域。代码import cv2 import numpy as np import time import random import math import shutil,os from sgbm import YOLO yolo YOLO() # # -----------------------------------双目相机的基本参数--------------------------------------------------------- # left_camera_matrix 左相机的内参矩阵 # right_camera_matrix 右相机的内参矩阵 # # left_distortion 左相机的畸变系数 格式(K1,K2,P1,P2,0) # right_distortion 右相机的畸变系数 # ------------------------------------------------------------------------------------------------------------- # 左镜头的内参如焦距 left_camera_matrix np.array( [[1.06265426e03, 0.00000000e00, 6.40549410e02], [0.00000000e00, 1.06309321e03, 4.90735489e02], [0.00000000e00, 0.00000000e00, 1.00000000e00]]) right_camera_matrix np.array( [[1.06520238e03, 0.00000000e00, 6.14658394e02], [0.00000000e00, 1.06445423e03, 4.80741249e02], [0.00000000e00, 0.00000000e00, 1.00000000e00]]) # 畸变系数,K1、K2、K3为径向畸变,P1、P2为切向畸变 left_distortion np.array([[-0.01085743, 0.17822576, -0.00781658, 0.00246898, -0.1378341 ]]) right_distortion np.array([[-0.00601122, 0.19590039, -0.0077834, 0.00157652, -0.16437705]]) # 旋转矩阵 R np.array( [[ 9.99910187e-01, 1.78596734e-04, 1.34009873e-02], [-2.38730178e-04, 9.99989910e-01, 4.48577430e-03], [-1.34000510e-02, -4.48857064e-03, 9.99900141e-01]]) # 平移矩阵 T np.array([-64.65432992,-0.2980873,3.76597753]) # size (640, 480) size (1280, 720) R1, R2, P1, P2, Q, validPixROI1, validPixROI2 cv2.stereoRectify(left_camera_matrix, left_distortion, right_camera_matrix, right_distortion, size, R, T) # 校正查找映射表,将原始图像和校正后的图像上的点一一对应起来 left_map1, left_map2 cv2.initUndistortRectifyMap(left_camera_matrix, left_distortion, R1, P1, size, cv2.CV_16SC2) right_map1, right_map2 cv2.initUndistortRectifyMap(right_camera_matrix, right_distortion, R2, P2, size, cv2.CV_16SC2) # print(Q) # 加载视频文件 video_path ./input/outdoor.mp4 filename video_path.split(/)[-1][:-4]最后计算机视觉、图像处理、毕业辅导、作业帮助、代码获取私聊会回复! ↓↓↓↓↓↓↓↓↓↓↓↓

更多文章