如何使用opencv python在对象中找到用于测量目的的参考点? [关闭]

2024-01-03

输入图像寻找参考点 https://i.stack.imgur.com/g0Dt1.png

我的问题陈述是我想测量钻头的长度。因此,如果我自动获得两个参考点,那么我将应用欧几里德距离公式进行距离测量。

在那张图片中,有两个红点。这两个红点是手动标记的。当我将钻头放在皮带上时,它会自动获取点。

我希望你能给我你的想法、相关链接和示例代码。我在 Python 3.8 上使用 OpenCV


自动标记终点

  1. 将 BGR 图像转换为灰度图像
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

  2. 使用模糊方法去除噪音。
    median = cv2.medianBlur(gray, size)

  3. 由于只有钻头是深黑色的,因此您可以轻松地使用阈值方法来获得钻头形状。
    img_thresh = cv2.Threshold(median,threshold_value,255,cv2.THRESH_BINARY_INV)

  4. 使用 findContours 获取钻头的轮廓
    contours, hierarchy = cv2.findContours(img_thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)假设在阈值之后只剩下钻取,选择最大的一个作为钻取。否则,您需要使用一些条件来选择要钻孔的轮廓。

  5. 使用 cv2.minAreaRect 获取绑定形状的最小矩形。
    rect = cv2.minAreaRect(contours[0])
    然后你可以很容易地通过矩形的长度得到钻孔的像素长度,如果你还想标记端点,你可以测试哪些点在矩形的短边上,或者只标记短边的中点来得到近似值位置。

计算像素长度到现实世界的长度

有多种实现方法,具体取决于不同的情况以及您想要的准确度。

  • 假设钻头都是标准长度 - 最简单的方法
    您不需要计算点之间的实际长度,您可以创建一个将像素长度映射到标准长度的表。得到像素长度后,通过映射表选择最接近的标准长度。

  • 没有限制,但最复杂的方式

  1. 进行相机标定,纠正相机畸变,得到相机的内参。
    https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html
    在计算像素长度之前,使用它们来获取无失真图像。
    dst = cv.undistort(img, mtx, dist, None, newcameramtx)

  2. 由于相机很难垂直于平面,因此必须计算图像与现实世界之间的坐标关系。 将校准板放在工作台上,最好将校准板放置在与钻头终点相同的高度。使用内在/外在矩阵计算图像到现实世界坐标的像素坐标。然后您可以使用上面计算的终点像素坐标来获取真实世界位置并使用欧氏距离来获取距离。如果您假设相机垂直于平面。您可以直接使用标尺或校准板来计算像素与现实世界的比例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用opencv python在对象中找到用于测量目的的参考点? [关闭] 的相关文章

  • 美丽的汤从谷歌搜索中提取href

    谷歌搜索给出了以下 HTML 的第一个结果 h3 class r a href https rads stackoverflow com amzn click com 0470284889 class l vst em Quantitati
  • 如何使用 pandas 选择所有非 NaN 列和非 NaN 最后一列?

    如果标题有点令人困惑 请原谅我 假设我有test h5 下面是使用读取该文件的结果df read hdf test h5 testdata 0 1 2 3 4 5 6 0 123 444 111 321 NaN NaN NaN 1 12 2
  • 带括号的上下文管理器

    我试图了解新的新内容带括号的上下文管理器Python 3 10 中的功能 新功能中的顶部项目here https docs python org 3 10 whatsnew 3 10 html 我的测试示例是尝试编写 with open f
  • 帮助需要在可选条件下编写正则表达式[关闭]

    我有一个日志文件包含如下内容 log Using data from yyyy mm dd 2011 8 3 0 files queued for scanning Warning E test H ndler pdf File not F
  • 无法在 mysql 表中的值中使用破折号(-)[重复]

    这个问题在这里已经有答案了 我一直在尝试从 python 将数据插入 MYSQL 表 我的sql表中的字段是id token start time end time和no of trans 我想存储使用生成的令牌uuid4在令牌栏中 但由于
  • 将 matplotlib png 转换为 base64 以在 html 模板中查看

    背景 你好 我正在尝试制作一个简单的网络应用程序 按照教程计算阻尼振动方程 并将结果的 png 返回到 html 页面 然后将其转换为 Base64 字符串 Problem 该应用程序运行正常 只是在计算结果时返回损坏的图像图标 可能是因为
  • 使用opencv计算深度视差图

    我无法使用 opencv 从视差图计算深度 我知道两个立体图像中的距离是用以下公式计算的z baseline focal disparity p 但我不知道如何使用地图计算视差 我使用的代码如下 为我提供了两个图像的视差图 import n
  • 十六进制数的按位异或

    我们如何在 Python 中对十六进制数进行异或 例如 我想要异或 ABCD and 12EF 答案应该是 B922 我使用了下面的代码 但它给出了错误的结果 xor two strings of different lengths def
  • 绘制“plot”而不是“scatter”时,图例选择会中断

    再会 这个问题是后续问题为什么图例选取仅适用于 ax twinx 而不适用于 ax https stackoverflow com q 60167378 9282844 下面提供的最小代码分别绘制了两条曲线ax1 and ax2 ax1 t
  • 可移植的非关系数据库

    我想尝试 尝试非关系数据库 最好的解决方案是 便携式 这意味着它不需要安装 理想情况下 只需将目录复制粘贴到某个地方即可使其工作 我不介意第一次使用时是否需要编辑一些配置文件或运行配置工具 可从 python 访问 适用于 Windows
  • 理解@property装饰器和继承[重复]

    这个问题在这里已经有答案了 这里是 Python 3 以防万一它很重要 我试图正确理解如何实现继承 property使用 我已经搜索了 StackOverflow 并阅读了大约 20 个类似的问题 但无济于事 因为他们试图解决的问题略有不同
  • Pyinstaller --onefile 警告文件已存在但不应存在

    跑步时Pyinstaller onefile 并开始得到结果 exe 会出现多个弹出窗口 并显示以下警告 WARNING file already exists but should not C Users myuser AppData L
  • InvalidArgumentException:消息:无效参数:“using”必须是字符串

    我对 python 很陌生 试图创建可重用的代码 当我尝试通过传递 Login 类下使用的所有参数来调用 test main py 中的 Login 类和函数 login user 时 我收到错误 InvalidArgumentExcept
  • 如何在 Python 中仅列出 zip 存档中的文件夹?

    如何仅列出 zip 存档中的文件夹 这将列出存档中的每个文件夹和文件 import zipfile file zipfile ZipFile samples sample zip r for name in file namelist pr
  • 在Python中计算结构体的CRC

    我有以下结构 来自 C 中的 NRPE 守护程序代码 typedef struct packet struct int16 t packet version int16 t packet type uint32 t crc32 value
  • 如何使用数据库在 Django 中的应用程序之间交换数据?

    我正在使用 Django 在网络上工作 我创建了 2 个应用程序 第一个用于客户端注册并将其数据添加到数据库 第二个应用程序供用户访问和查看交互界面 这个想法是使用第二个应用程序从数据库中的客户端获取数据 并使用它向用户显示一些信息 我的问
  • 如何将 pytest 装置与 django TestCase 一起使用

    我如何在TestCase方法 类似问题的几个答案似乎暗示我的例子应该有效 import pytest from django test import TestCase from myapp models import Category py
  • 从 C 线程调用 Python 代码

    我对从 C 或 C 线程调用 Python 代码时如何确保线程安全感到非常困惑 The Python 文档 http docs python org c api init html non python created threads似乎是
  • 在Python中从列表中获取n个项目组的惯用方法? [复制]

    这个问题在这里已经有答案了 给定一个列表 A 1 2 3 4 5 6 是否有任何惯用的 Pythonic 方式来迭代它 就好像它是 B 1 2 3 4 5 6 除了索引之外 这感觉像是 C 的遗留物 for a1 a2 in A i A i
  • 在读/写二进制数据结构时访问位域

    我正在为二进制格式编写一个解析器 这种二进制格式涉及不同的表 这些表同样采用二进制格式 通常包含不同的字段大小 其中 50 100 个之间 大多数这些结构都有位域 并且在 C 语言中表示时看起来像这样 struct myHeader uns

随机推荐

  • String 子字符串在 Swift 中如何工作

    我一直在使用 Swift 3 更新一些旧代码和答案 但是当我使用 Swift 字符串和子字符串索引时 事情变得令人困惑 具体来说 我正在尝试以下操作 let str Hello playground let prefixRange str
  • SVN:创建文件夹的转储文件

    我正在尝试在 SVN 存储库中创建文件夹的转储文件 我的目标是将此转储导入另一个存储库 但那是另一个故事 我读了大概 20 页关于这个的内容 他们都告诉我要使用svndump过滤器 http svnbook red bean com en
  • wkhtmltopdf 每次运行都会生成不同的校验和

    我试图验证从运行到运行时从 wkhtmltopdf 生成的内容是否相同 但是每次运行 wkhtmltopdf 时 我都会针对同一页面获得不同的哈希 校验和值 我们正在谈论一些真正基本的东西 比如使用以下 html 页面 p This is
  • Azure 虚拟机上的 HTTPS

    我正在将我们的网站迁移到 Azure 并在 Windows Server 2012 VM 上运行 我已从 GoDaddy 购买了通配符 SSL 证书 并且已在虚拟机上安装和配置了它 我还配置了 IIS 以利用此证书来处理端口 443 上的所
  • 如何删除数据框中空值数量超过 x 的行? [复制]

    这个问题在这里已经有答案了 我正在尝试删除数据框中具有超过 7 个空值的行 请提出一些有效的方法来实现这一目标 如果我理解正确的话 只有当一行中的 nan 总数超过时 才需要删除行7 df df df isnull sum axis 1 l
  • 使用什么 Java 异常类来处理 HTTP 错误?

    我正在使用阿帕奇Http客户端 http hc apache org httpclient 3 x 并且希望通过 Java 异常机制向调用代码传达 HTTP 错误 400 错误请求 404 未找到 500 服务器错误等 Java 标准库或广
  • WebSockets 版本之间的协议差异是什么?

    是否有任何地方的摘要协议差异各种 WebSockets 草案之间的关系 浏览器支持级别仍然遍布各处 因此仅考虑 RFC 是不够的 显然 Sec WebSocket Version 发生了变化 而且我知道早期的格式非常不同 然而 我指的是协议
  • Angular 9 Google 地图 API 地点自动完成

    我有一个 Angular 9 刚刚从 8 迁移 我需要使用 Google Places API 我有一个 API 密钥 进行地址自动完成 我可以使用 angular googlemaps 库显示地图 但我无法制作自动完成工作 我尝试使用ht
  • 使用 libvlc 将相机流式传输到内存并显示帧

    我正在尝试使用 libvlc 将捕获设备 相机 流式传输到内存中 我无法显示内存中存储的数据的图像 内存内容看起来没问题 我使用 Visual Studio 及其内存窗口检查了它 imshow 创建的图片始终是灰色的 如何显示内存中存储的图
  • jquery按钮不响应click方法

    所以我使用append方法用jquery动态渲染一个段落 我想向它添加一个点击事件 但由于某种原因 点击事件不起作用 我知道解决方案可能很简单 但我是jquery的新手 我会很感激任何帮助 我知道函数内部的代码可以工作 因为我用静态按钮测试
  • 什么是数据对齐?在 C 中类型转换指针时,为什么以及何时应该担心? [复制]

    这个问题在这里已经有答案了 我找不到一个像样的文档来解释对齐系统如何工作以及为什么某些类型比其他类型更严格地对齐 我会尝试简短地解释一下 什么是数据对齐 计算机的体系结构由处理器和内存组成 记忆是按细胞组织的 因此 0x00 data 0x
  • StackExchange 站点如何关联用户帐户和 OpenID 登录信息?

    我喜欢 StackExhchange StackOverflow 集成 OpenID 的方法 据我了解 这个过程是这样的 如果用户向 OpenID 提供商 即 Google 注册 StackOverflow 或类似网站 会为该用户创建一个帐
  • Python 类中的线程

    我最近开始使用python的线程模块 经过一番尝试和错误后 我设法使用大多数教程中给出的以下示例代码来使基本线程工作 class SomeThread threading Thread def init self count threadi
  • 2021年8月18日SDK更改后如何从代码中设置azure实验名称?

    2021 年 8 月 18 日 Microsoft 为了我们的方便 对其 Azure ML SDK 进行了以下更改 https learn microsoft com en us azure machine learning azure m
  • JSF 注释不适用于 Spring-boot

    我曾试图使用来自Spring Boot 和 JSF Primefaces Richfaces https stackoverflow com questions 22544214 spring boot and jsf primefaces
  • 如何从 Chrome 扩展程序向本机应用程序发送消息?

    我有一个用 C 编写的本机应用程序 我可以使用以下命令将数据从本机应用程序发送到 chrome 扩展如何从本机应用程序向 Chrome 扩展程序发送消息 https stackoverflow com questions 18134665
  • 连接可选列表

    我有三个Optional gt 必须将它们组合并返回 我尝试使用Optional map and flatmap 但没有成功 public Optional
  • 春季启动日志记录

    我正在使用 Spring boot 构建一个简单的 REST 服务 我想知道处理日志记录的最合适的方法 In my 应用程序属性文件我有以下内容 logging level org springframework web DEBUG 在开发
  • 并行代码可扩展性差

    最近我一直在分析我的并行计算在 16 核处理器上实际上是如何加速的 我得出的一般公式 线程越多 每个核心的速度就越慢 让我很尴尬 以下是我的CPU负载和处理速度的图表 因此 您可以看到处理器负载增加 但速度增加得慢得多 我想知道为什么会发生
  • 如何使用opencv python在对象中找到用于测量目的的参考点? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 输入图像寻找参考点 https i stack imgur com g0Dt1 png 我的问题陈述是我想测量钻头的长度 因此 如果我