OpenCV中求已知纵横比的矩形的距离

2024-03-29

我正在开发一个 OpenCV 程序来查找从相机到具有已知长宽比的矩形的距离。求出从前向视图看到的到矩形的距离效果很好:

实际距离与计算出的距离非常接近:


            wtarget · pimage
d = c ——————————————————————————
       2 · ptarget · tan(θfov / 2)
  

Where wtarget is the actual width (in inches) of the target, pimage is the pixel width of the overall image, ptarget is the length of the largest width (in pixels) of the detected quadrilateral, and θfov is the FOV of our webcam. This is then multiplied by some constant c.

当从非向前的角度查看目标矩形时,就会出现此问题:

这两个方向之间的实际距离差异很小,但检测到的距离相差近 2 英尺。

我想知道的是如何在考虑不同视角的情况下一致地计算距离。我尝试过getPerspectiveTransform,但这需要我知道目标的最终比例 - 我只知道纵横比。


这是你所知道的:

  1. 左上角和右上角之间的距离(以英寸为单位)(w_target)
  2. 这些角之间的距离(以像素为单位)在 2D 平面上 (p_target)

所以问题是你没有考虑到距离的缩小p_target当矩形有一定角度时。例如,当矩形旋转 45 度时,您将丢失大约一半的像素p_target,但你的公式假设w_target是常数,所以你高估了距离。

为了解决这个问题,您应该估计盒子转动的角度。我不确定是否有一种简单的方法可以从中提取该信息getPerspectiveTransform,但这也许是可能的。您可以设置约束优化,其中决策变量是距离和倾斜角度,并强制框上左右点之间的公制距离。

最后,无论您在做什么,都应该确保您的相机已校准。根据您的应用程序,您也许可以使用四月标签 https://april.eecs.umich.edu/wiki/index.php/AprilTags只是为了解决你的问题。

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

OpenCV中求已知纵横比的矩形的距离 的相关文章

  • 使用 mono/nunit-console/4 在 Mac OS X 控制台上运行测试

    我安装了 Max OS X 10 11 1 上面装有 Xamarin 我编写了简单的测试类 只是为了测试在 Mac OS X 和 Ubuntu 上运行 Nunit 测试 该类实际上有一个返回字符串的方法 using System names
  • 有没有快速创建集合的方法?

    目前我正在创建一个像这样的新集 std set a s s insert a1 s insert a2 s insert a3 s insert a10 有没有办法创建s在一行 int myints 10 20 30 40 50 std s
  • 在实体框架拦截器中向 DbScanExpression 添加内部联接

    我正在尝试使用实体框架 CommandTree 拦截器通过 DbContext 向每个查询添加过滤器 为了简单起见 我有两个表 一个称为 User 有两列 UserId 和 EmailAddress 另一个称为 TenantUser 有两列
  • 防止 boost::asio::io_context 在空轮询调用时停止

    此代码调用发布的句柄 boost asio io context ioc boost asio post ioc std cout lt lt lol lt lt std endl ioc poll 而这并没有 boost asio io
  • 类特定的新删除运算符是否必须声明为静态

    标准中是否要求类特定的 new new delete 和 delete 是静态的 我可以让它们成为非静态成员运算符吗 为什么需要它们是静态的 它们被隐式声明为静态 即使您没有键入 static
  • 与 Qt 项目的静态链接

    我有一个在 Visual Studio 2010 Professional 中构建的 Qt 项目 但是 当我运行它 在调试或发布模式下 时 它会要求一些 Qt dll 如果我提供 dll 并将它们放入 System32 中 它就可以工作 但
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • 如何获取 QTableView 的标题列表?

    我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
  • 将标量添加到特征矩阵(向量)

    我刚刚开始使用 Eigen 库 无法理解如何向所有矩阵成员添加标量值 假设我有一个矩阵 Eigen Matrix3Xf mtx Eigen Matrix3Xf Ones 3 4 mtx mtx 1 main cxx 104 13 error
  • 是否有相当于 Clang/LLVM 的 .spec 文件,在哪里可以找到参考?

    The gcc驱动程序可以配置为使用特定的链接器 特定的选项和其他细节 例如覆盖系统头 specs files 当前 截至撰写本文时 GCC 版本 4 9 0 的手册此处描述了规范文件 https gcc gnu org onlinedoc
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • 在 EnvDTE 中调试时捕获 VS 局部变量

    是否可以使用 EnvDTE 进行 vsix Visual Studio 扩展来捕获本地和调试窗口使用的调试数据 或者可以通过其他方法吗 我想创建一个自定义的本地窗口 我们可以修改它以根据需要显示一些较重的内容 而无需为高级用户牺牲原始的本地
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • 您是否将信息添加到每个 .hpp/.cpp 文件的顶部? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 创建新的 C 头文件 源文件时 您会在顶部添加哪些信息 例如 您是否添加日期 您的姓名 文件描述等 您是否使用结构化格式来存储此信息 e g F
  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作
  • 使我的 COM 程序集调用异步

    我刚刚 赢得 了在当前工作中维护用 C 编码的遗留库的特权 这个dll 公开使用 Uniface 构建的大型遗留系统的方法 除了调用 COM 对象之外别无选择 充当此遗留系统与另一个系统的 API 之间的链接 在某些情况下 使用 WinFo
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行

随机推荐

  • 正则表达式避免了Java中不必要的回溯

    你好 我是正则表达式世界的新手 我想在 Java 测试字符串中提取时间戳 位置和 id str 字段 20110302140010915 user is translator false show all inline media fals
  • postgresql 删除重复行

    我只想删除具有相同名称的重复行 但我想保留这些行的值高于其他行 问题是 当我执行代码时 所有重复的行都被删除 并且没有一个被保留 为什么这样 SELECT name from select name ROW NUMBER OVER PART
  • 反应路由器中的查询字符串

    我正在尝试使用查询字符串设置路由路径 内容如下 www mywebsite com results query1 query1 query2 query2 query3 query3 我会像这样过渡到 结果 组件
  • 锚链接在 iPad 上无法正常工作

    我们在 iPad 上遇到了固定元素的问题 您可以在这里查看我们的布局 http cibology edoardobiasini it http cibology edoardobiasini it The position fixed右侧的
  • 十六进制浮点文字中的十六进制“E/e”与指数形式的“E/e”如何区分?

    在 C 中 如果我想要一个浮点文字 x 为十六进制形式并具有指数值 它将表示为 float x 0X2aE 10 其中0x用于表示它是十六进制的 2a用于表示十六进制字符 E 10用于表示十的10次方的数字 然而 编译器是否知道它不是 2a
  • 为什么当我在 switch 语句中为每个枚举常量都有情况时,我仍然必须提供默认值吗? [复制]

    这个问题在这里已经有答案了 我试图在 Java 中声明一个枚举 并在 switch 语句中使用该类型的变量 其中涵盖了该类型枚举常量的所有可能情况 enum MyEnum FOO BAR private static void test M
  • 按版本对字符串列表进行排序

    我有一个字符串列表 每个字符串都遵循模式 Path UpdateTo Version Order 我需要对列表进行排序 使最低版本号位于顶部 如果存在多个具有相同版本号的文件 则附加一个可选的顺序参数 如果任何字符串上存在订单 那么它应该出
  • 以 cm 为单位调整图像大小 C#

    我有一个要求 要求提供 10 X 6 88 厘米的图像 我知道我不能简单地将厘米转换为像素 因为一个像素大小取决于用户显示分辨率 我想知道是否有办法调整图像大小以达到该尺寸 以厘米为单位 我还需要保留图像扩展名 例如 无法将其转换为 pdf
  • 在hive中如何将字符串转换为数组?

    我使用的是蜂巢1 1 hive gt select country from releases limit 1 OK us ca fr 目前 国家在 hive 中是字符串类型 如何将其转换为数组 String 我尝试了下面的方法 但它抛出错
  • Spring MVC 中的嵌套异常处理

    我收到以下错误 org springframework web util NestedServletException 请求处理失败 嵌套异常是 java lang NullPointerException 为了在控制器中处理这个问题 我使
  • 如何将钩子添加到 uberjar 进程中(使用 lein 构建)

    我想向 uberjar 进程添加一个钩子 具体示例是将 maxmind geoip dat 文件下载到资源文件夹中 以便每次部署时都会将更新版本捆绑到 jar 中 示例 建议表示赞赏 谢谢 我建议创建一个调用 uberjar 的自定义 le
  • 将查询结果从 BigQuery 导出到 Postgres

    我正在尝试导出 BigQuery 中的查询结果 并将数据导入 Postgres 数据可能多达 2 5 亿条记录 约 26Gb 选项1 将查询结果保存到临时表 将表导出为 csv 批量更新插入到 postgres 这会很慢 选项2 以某种方式
  • EhCache和数据库刷新

    我正在使用 Spring 和 ehcache 使用查询将数据填充到缓存中 此过程必须每 10 分钟发生一次 有配置可以设置吗 提前致谢 通常 ehCache 将用于给出一个 ttl 以自动使缓存失效 根据我从您的问题中收集到的信息 您要求每
  • 需要在SQL Server 2008中使用CTC来实现业务需求

    对小规模的实施会有很大的帮助SP以满足以下要求 业务规则是 EndDate 应该是下一个规则的开始日期 否则规则不应该是 视为连续的 并将被视为其他规则系列 如 在下面的示例中显示有两个系列 因为第四个系列 它已经打破了记录 RuleId
  • 如何使用 Fish shell 设置宝石路径?

    如何使用 Fish shell 正确设置宝石路径 sanoy nice system D c h bellevue gt gem 安装包 警告 您的 PATH 中没有 home sanoy gem ruby 2 2 0 bin gem 可执
  • 如何使用java/spring boot读取Vault kv

    我正在尝试弄清楚如何使用Hashicorp s Vault与弹簧靴 最初 我尝试遵循该指南 https spring io guides gs vault config scratch https spring io guides gs v
  • Xcode 8 不显示整个 NSLog 输出

    今天升级到 Xcode 8 GM 后 我注意到 NSLog 没有将整个日志消息打印到控制台 当处理下载大量信息的 API 时 这一点尤其明显 例如 REST API 从数据库下载所有产品 它只显示第一个产品的前 30 个键 其余信息被裁剪
  • 在 Ruby 中实现贝叶斯分类器?

    我想实现一个简单的贝叶斯分类系统来对短信进行基本的情感分析 欢迎在 Ruby 中实施的实用建议 除贝叶斯之外的其他方法的建议也将受到欢迎 Ilya Grigorik 在这篇博客文章中对这个问题有一个很好的答案贝叶斯分类器 http www
  • 为什么一个整型变量在赋值给另一个变量后仍然可以使用?

    我试图了解 Rust 中的所有权是如何运作的 考虑以下简单示例 let u own 3432 let d own u own println u own 编译器不会抱怨 尽管所有权来自值3432已移至d own 最后一条语句是println
  • OpenCV中求已知纵横比的矩形的距离

    我正在开发一个 OpenCV 程序来查找从相机到具有已知长宽比的矩形的距离 求出从前向视图看到的到矩形的距离效果很好 实际距离与计算出的距离非常接近 wtarget pimage d c 2 ptarget tan fov 2 Where