YOLOv5+单目测量物体尺寸(python)

11 篇文章 59 订阅 ¥129.90 ¥299.90
38 篇文章 70 订阅
35 篇文章 28 订阅
本文介绍了使用YOLOv5进行单目物体尺寸测量的方法,包括测距原理、相机标定、相机测距的实现细节,以及实验效果展示。通过相机标定获取焦距,结合像素点尺寸反算物体实际尺寸。提供了工程源码下载链接。
摘要由CSDN通过智能技术生成

相关链接
1. YOLOV5 + 单目测距(python)
2. YOLOV7 + 单目测距(python)

本篇博文工程源码下载在文章末尾

1. 相关配置

系统:win 10
YOLO版本:yolov5 6.1
电脑显卡:NVIDIA 2080Ti(CPU也可以跑,GPU只是起到加速推理效果)

2. 测距原理

单目测量尺寸原理和测距原理正好相反,但是需要固定相机距离目标的距离,然后把单目测距公式 D = (F*W)/P 反过来求目标的长宽即可:

                                        W_True = 
以下是YOLOv5+单目测量物体尺寸的步骤: 1.相关配置 首先,需要安装YOLOv5和OpenCV库。可以使用以下命令安装: ```shell !git clone https://github.com/ultralytics/yolov5.git !pip install opencv-python ``` 2.测距原理 单目测距是通过计算物体在图像上的像素大小和实际物体大小之间的比例来实现的。这个比例可以通过相机标定来获得。 3.相机标定 相机标定是通过拍摄已知大小的物体来确定相机的内部参数和外部参数。这里介绍两种标定方法。 3.1:标定方法1(针对图片) 首先,需要准备一组已知大小的棋盘格图片。然后,使用以下代码进行标定: ```python import numpy as np import cv2 # 准备棋盘格图片 objp = np.zeros((6*7, 3), np.float32) objp[:, :2] = np.mgrid[0:7, 0:6].T.reshape(-1, 2) objpoints = [] # 存储物体点 imgpoints = [] # 存储图像点 images = glob.glob('*.jpg') # 图片路径 for fname in images: img = cv2.imread(fname) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, corners = cv2.findChessboardCorners(gray, (7, 6), None) if ret == True: objpoints.append(objp) imgpoints.append(corners) cv2.drawChessboardCorners(img, (7, 6), corners, ret) cv2.imshow('img', img) cv2.waitKey(500) cv2.destroyAllWindows() # 标定 ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None) ``` 3.2:标定方法2(针对视频) 首先,需要准备一段包含已知大小的棋盘格的视频。然后,使用以下代码进行标定: ```python import numpy as np import cv2 # 准备棋盘格图片 objp = np.zeros((6*7, 3), np.float32) objp[:, :2] = np.mgrid[0:7, 0:6].T.reshape(-1, 2) objpoints = [] # 存储物体点 imgpoints = [] # 存储图像点 cap = cv2.VideoCapture('calibration_video.mp4') # 视频路径 while True: ret, frame = cap.read() if ret == True: gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) ret, corners = cv2.findChessboardCorners(gray, (7, 6), None) if ret == True: objpoints.append(objp) imgpoints.append(corners) cv2.drawChessboardCorners(frame, (7, 6), corners, ret) cv2.imshow('frame', frame) cv2.waitKey(500) else: break cv2.destroyAllWindows() # 标定 ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None) ``` 4.相机测距 4.1 测距添加 在YOLOv5的detect.py文件中添加以下代码: ```python def get_distance(bbox, focal_length): # 计算物体在图像上的像素大小 pixel_width = bbox[2] - bbox[0] pixel_height = bbox[3] - bbox[1] pixel_size = (pixel_width + pixel_height) / 2 # 计算物体在实际世界中的大小 real_size =
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积极向上的mr.d

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值