用PythonOpenCV打造桌面物体测距神器从摄像头到咖啡杯的精准测量每次看到桌面上那杯咖啡你是否好奇它离摄像头到底有多远今天我们就用Python和OpenCV5分钟内搭建一个单目测距系统让你轻松测量任何桌面物体的距离。无需专业设备普通USB摄像头即可实现1. 准备工作与环境搭建1.1 硬件与软件需求要开始这个项目你只需要准备以下物品普通USB摄像头如罗技C920或笔记本内置摄像头一张标准A4纸用于摄像头标定待测物体如咖啡杯、手机或书本软件方面需要安装pip install opencv-python numpy1.2 单目测距的核心原理单目测距基于相似三角形原理核心公式非常简单距离 (物体实际宽度 × 焦距) / 图像中的像素宽度这意味着我们需要知道物体的实际物理尺寸如A4纸宽度为21cm摄像头焦距通过标定获得物体在图像中的像素宽度通过OpenCV检测获得提示选择A4纸作为标定物是因为其尺寸标准且易于获取当然你也可以使用其他已知尺寸的物体。2. 摄像头快速标定实战2.1 焦距计算步骤将A4纸横向放置在距离摄像头约30cm处拍摄照片并测量A4纸在图像中的像素宽度使用公式计算焦距# 示例焦距计算代码 known_distance 30 # cm known_width 21.0 # A4纸宽度(cm) pixel_width 450 # 图像中A4纸的像素宽度 focal_length (pixel_width * known_distance) / known_width print(f计算得到的焦距为: {focal_length:.2f}像素)2.2 标定过程常见问题问题现象可能原因解决方案检测不到A4纸光线不足增加环境亮度或使用辅助光源边缘检测不准确背景杂乱使用纯色背景板测量结果波动大摄像头自动对焦固定摄像头焦距或使用手动对焦3. 完整测距代码实现3.1 基础测距脚本import cv2 import numpy as np # 配置参数 KNOWN_WIDTH 21.0 # A4纸宽度(cm) FOCAL_LENGTH 650 # 通过标定获得的焦距(像素) def find_paper_contour(image): gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blurred cv2.GaussianBlur(gray, (5, 5), 0) edged cv2.Canny(blurred, 50, 150) contours, _ cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) return max(contours, keycv2.contourArea) if contours else None cap cv2.VideoCapture(0) while True: ret, frame cap.read() if not ret: break contour find_paper_contour(frame) if contour is not None: x, y, w, h cv2.boundingRect(contour) cv2.rectangle(frame, (x, y), (xw, yh), (0, 255, 0), 2) distance (KNOWN_WIDTH * FOCAL_LENGTH) / w cv2.putText(frame, f{distance:.1f}cm, (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2) cv2.imshow(Distance Measurement, frame) if cv2.waitKey(1) 27: break cap.release() cv2.destroyAllWindows()3.2 代码优化技巧光照自适应处理使用动态阈值替代固定阈值gray cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) blurred cv2.GaussianBlur(gray, (5, 5), 0) thresh cv2.adaptiveThreshold(blurred, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)多物体检测通过轮廓面积筛选不同物体for contour in contours: if 1000 cv2.contourArea(contour) 50000: # 处理符合条件的物体4. 进阶应用与精度提升4.1 测量任意物体的距离要测量非A4纸物体你需要预先知道物体的实际宽度修改代码中的KNOWN_WIDTH参数调整轮廓检测参数以适应不同物体形状4.2 提高测量精度的5个技巧固定摄像头位置使用三脚架或支架减少晃动优化光照条件均匀的侧光能产生更好的边缘检测效果多次测量取平均减少单次测量的随机误差定期重新标定特别是当摄像头位置改变后使用更高分辨率1080p摄像头比720p精度更高4.3 实际应用场景扩展智能书桌自动提醒用户与屏幕的距离AR测量工具结合增强现实技术实现虚拟测量工业检测小型零件尺寸的快速测量教育实验物理实验中距离变化的实时监测在办公室环境中我将这个系统用于监测显示器与眼睛的距离当距离小于50cm时会发出提醒有效缓解了长时间办公带来的视觉疲劳。