利用相机焦距进行物体尺寸测量

简介: 利用相机焦距进行物体尺寸测量

前言


  在上一篇视觉测量工件尺寸中发现在实际应用中存在些许测量不准的BUG,在此特向大家致歉!


  在本篇中提出一种利用相机焦距和相机距离目标的距离进行物体尺寸测量,这里我借鉴了下《视频检测+定位+测距+控制鼠标移动》中测量距离的方法进行调整这个里面的公式原理:


X轴方向: 物体的实体尺寸 = 相机距离物体的距离/焦距 * 图像像素  

Y轴方向: 物体的实体尺寸 = 相机距离物体的距离/焦距 * 图像像素  



实践


  例如我们筹备标定板进行标定,这里标定的过程可以参考初探单目相机测距——相机标定,我们使用图像进行标定,这里需要注意的事项是:标定图像的尺寸需要同后期使用测量物体尺寸时拍摄的尺寸保持一致。

        image.png

image.png

  这里我们通过标定过程可以得到相机的两个焦距的值以及目标距离相机的距离分别为:


FX, FY, D =      ,   3.2757(米)


  经过测量,可以得到标定板距离相机的距离,在后面中我们测量物体的尺寸应当选择厚度较小的,或者使用投影的方式,这样可以最大限度降低误差。

image.png

image.png

image.png



代码


  这里我们可以得到图像的像素尺寸,使用方法为点击线段的两个端点即可获取两端点的图像坐标,进一步可以计算出自己的K值。


image.png

import cv2
img = cv2.imread('test.jpg')
def mouse_click(event, x, y, flags, para):
    if event == cv2.EVENT_LBUTTONDOWN:  # 左边鼠标点击
        print('PIX:', x, y)
if __name__ == '__main__':
    cv2.namedWindow("img")
    cv2.setMouseCallback("img", mouse_click)
    while True:
        cv2.imshow('img', img)
        if cv2.waitKey() == ord('q'):
            break
    cv2.destroyAllWindows()
复制代码


根据这个由勾股定理带入计算可以得到工件尺寸


import math
FX, FY = 16101.6621878712, 16105.9886831900  # 相机的焦距
D = 3.2757  # 物体距离相机的理论距离单位米
# 测量工件的两端坐标
x1, y1 = (2333, 1652)
x2, y2 = (3060, 1610)
# 计算物体分别在XY轴上的像素长度 
x = abs(x2 -x1)
y = abs(y2 - y1)
# 计算物体在XY轴上的实际长度 (得到值的单位是米)
DX = (x * D) / FX
Dy = (y * D) / FY
DL = math.sqrt(DX*DX + Dy*Dy)  # 勾股定理计算尺寸
print("物体的实际尺寸", DL)



相关文章
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
703 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
算法 安全 Linux
二进制代码保护和混淆
常见二进制代码保护和混淆的概述
851 0
二进制代码保护和混淆
|
2月前
|
缓存 编译器 C++
Keil MDK常见报错与解决方案详细笔记
本文系统梳理Keil MDK开发中常见错误,涵盖编译、链接、下载调试、路径配置、警告处理等八大类问题,含典型错误码(如#5、L6218E)、根因分析及实操解决方案,助力嵌入式开发者高效排错。(239字)
1083 3
|
JSON 人工智能 数据格式
AI计算机视觉笔记二十六:YOLOV8自训练关键点检测
本文档详细记录了使用YOLOv8训练关键点检测模型的过程。首先通过清华源安装YOLOv8,并验证安装。接着通过示例权重文件与测试图片`bus.jpg`演示预测流程。为准备训练数据,文档介绍了如何使用`labelme`标注工具进行关键点标注,并提供了一个Python脚本`labelme2yolo.py`将标注结果从JSON格式转换为YOLO所需的TXT格式。随后,通过Jupyter Notebook可视化标注结果确保准确性。最后,文档展示了如何组织数据集目录结构,并提供了训练与测试代码示例,包括配置文件`smoke.yaml`及训练脚本`train.py`,帮助读者完成自定义模型的训练与评估。
5889 2
|
12月前
|
机器学习/深度学习 人工智能 算法
Python+YOLO v8 实战:手把手教你打造专属 AI 视觉目标检测模型
本文介绍了如何使用 Python 和 YOLO v8 开发专属的 AI 视觉目标检测模型。首先讲解了 YOLO 的基本概念及其高效精准的特点,接着详细说明了环境搭建步骤,包括安装 Python、PyCharm 和 Ultralytics 库。随后引导读者加载预训练模型进行图片验证,并准备数据集以训练自定义模型。最后,展示了如何验证训练好的模型并提供示例代码。通过本文,你将学会从零开始打造自己的目标检测系统,满足实际场景需求。
12127 1
Python+YOLO v8 实战:手把手教你打造专属 AI 视觉目标检测模型
|
资源调度 前端开发 算法
鸿蒙OS架构设计探秘:从分层设计到多端部署
本文深入探讨了鸿蒙OS的架构设计,从独特的“1+8+N”分层架构到模块化设计,再到智慧分发和多端部署能力。分层架构让系统更灵活,模块化设计通过Ability机制实现跨设备一致性,智慧分发优化资源调度,多端部署提升开发效率。作者结合实际代码示例,分享了开发中的实践经验,并指出生态建设是未来的关键挑战。作为国产操作系统的代表,鸿蒙的发展值得每一位开发者关注与支持。
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
数据采集 自然语言处理 JavaScript
Playwright多语言生态:跨Python/Java/.NET的统一采集方案
随着数据采集需求的增加,传统爬虫工具如Selenium、Jsoup等因语言割裂、JS渲染困难及代理兼容性差等问题,难以满足现代网站抓取需求。微软推出的Playwright框架,凭借多语言支持(Python/Java/.NET/Node.js)、统一API接口和优异的JS兼容性,解决了跨语言协作、动态页面解析和身份伪装等痛点。其性能优于Selenium与Puppeteer,在学术数据库(如Scopus)抓取中表现出色。行业应用广泛,涵盖高校科研、大型数据公司及AI初创团队,助力构建高效稳定的爬虫系统。
760 2
Playwright多语言生态:跨Python/Java/.NET的统一采集方案
|
供应链 安全 分布式数据库
探索区块链技术:从原理到应用的全面解析
【10月更文挑战第22天】 本文旨在深入浅出地探讨区块链技术,一种近年来引起广泛关注的分布式账本技术。我们将从区块链的基本概念入手,逐步深入到其工作原理、关键技术特点以及在金融、供应链管理等多个领域的实际应用案例。通过这篇文章,读者不仅能够理解区块链技术的核心价值和潜力,还能获得关于如何评估和选择适合自己需求的区块链解决方案的实用建议。
1085 0
|
机器学习/深度学习 编解码 人工智能
【计算机视觉】MaskFormer:将语义分割和实例分割作为同一任务进行训练
目标检测和实例分割是计算机视觉的基本任务,在从自动驾驶到医学成像的无数应用中发挥着关键作用。目标检测的传统方法中通常利用边界框技术进行对象定位,然后利用逐像素分类为这些本地化实例分配类。但是当处理同一类的重叠对象时,或者在每个图像的对象数量不同的情况下,这些方法通常会出现问题。
1601 0
【计算机视觉】MaskFormer:将语义分割和实例分割作为同一任务进行训练