OpenCV 中的相机标定和鸟瞰投影

2024-04-13

我已经完成了相机校准。现在我想获得棋盘图片的鸟瞰图。如下所示。但结果很奇怪,看起来不是一个正方形。你可以看到图3。每个正方形都是7.95x7.95。有人知道为什么吗?

gpsPoints[0] = Point2f(..., ...);
gpsPoints[1] = Point2f(..., ...);
gpsPoints[2] = Point2f(..., ...);
gpsPoints[3] = Point2f(..., ...);

dst[0] = Point2f(..., ...);
dst[1] = Point2f(..., ...);
dst[2] = Point2f(..., ...);
dst[3] = Point2f(..., ...);
Mat transmtx = getPerspectiveTransform(gpsPoints, dst);
warpPerspective(img, frame, transmtx, img.size());

一般来说,单应性会将直线转换为直线。

由于您只提供了 4 个角,因此透视变换是唯一定义的。因此,如果您确实选择了正确的 4 个角,但图案中的某个位置存在错误的结构,那么这些结构在输入图像中肯定已经是错误的。

在您的场景中,这可能是由于镜头畸变而发生的,因此现实中的直线在(输入)图像中看不到直线。或者输入图像中的线条在现实世界中并不笔直,例如您的图案底座不是完全平坦的,或者您的图案没有很好地粘合在平面上。

在 GIMP 中,我向您的图像添加了一些标记。

轮廓(绿点)是从一个角到下一个角的单直线。正如您所看到的,它们很好地位于图案底座的边界上,这暗示图像中没有太多镜头畸变。

另一方面,顶部的红线由单线段组成,始终连接两个相邻的角。正如您所看到的,第二条和第三条线段有明显的“弯曲”,因此整个图案上没有直线。 底部的红线(细)是从图案的一侧到另一侧的直线,您可以看到线条两侧有一些白色像素的部分。所以你的图案在图像中看起来并不直。

我猜你的图案制作得不好,但这只是一个猜测,最终也可能是一些奇怪的镜头行为。您可以从不同的视图(相同的相机焦点等,如果可能)捕获相同图案的图像以进一步分析。

正如 user3896254 (thx) 所说,透视扭曲可能会严重放大不同的错误。测量(或手动标记)错误(即使是亚像素精度)可能是另一个问题。

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

OpenCV 中的相机标定和鸟瞰投影 的相关文章

  • 使用静态函数变量与类变量来存储某些状态

    可以说我有这样的功能 void processElement doSomething someArray lastProcessedElement 1 问题是 每次调用这个函数时 我都需要存储我调用 doSomething 的最后一个元素
  • 具有字典属性的 C# 匿名对象

    我正在尝试将字典转换为匿名类型 每个键都有一个属性 我尝试用谷歌搜索 但我所能找到的只是如何将匿名对象转换为字典 我的字典看起来像这样 var dict new Dictionary
  • C++ 中的类型作为返回类型

    是否有可能从函数返回一个类型作为返回类型 并将其用作成员变量 如下所示 constexpr type myFunction int a int b if a b 8 return int 8t if a b 16 return int 16
  • 如何在类的 Dispose 方法中取消订阅匿名函数?

    我有一个 A 类 在它的构造函数中 我正在为 Object B 的 eventHandler 分配一个匿名函数 如何从 A 类的 Dispose 方法中删除 取消订阅 它 任何帮助 将不胜感激 谢谢 Public Class A publi
  • 在执行方法的括号内声明变量

    默认情况下 变量在方法执行之前定义 例如 DateTime myDate if DateTime TryParse date out myDate 我们可以实现内联声明 并且该变量可以在外部使用 例如 if DateTime TryPars
  • 如何在 Windows 中获取和设置系统音量

    我想使用 unity 和 c 将键盘点击时的操作系统音量设置为一定水平 例如我想将 Windows 音量 不是 unity 设置为 70 我该怎么做 void Update if Input GetKeyDown KeyCode A Set
  • 如何对多重映射中的键和值进行排序?

    建议使用任何方法对多重映射的键及其值进行排序 例如 输入 5 1 1 9 1 1 5 2 1 2 输出必须是 1 1 1 2 1 9 5 1 5 2 答案是emplace hint 伪代码如下所示 insert with hint M mm
  • 为什么 Clang 更喜欢主模板而不是 C++17 的专业化?

    下列program https godbolt org z f43EK4PnY从此代码中减少question https stackoverflow com questions 66740188 template
  • 高效快速的线程参数方法

    创建带参数的线程最有效的方法是什么 参数是一个结构体 如果该结构体不能保留在父线程堆栈上 有两种解决方案 具有动态内存分配 struct Arg int x int y void my thread void v arg Arg arg A
  • 具有 C++ 客户端和 C# 后端的协议缓冲区?

    如何通过 HTTP 或等效的 Web 服务将 C 后端与 C 前端连接起来 这里分为三个部分 服务器 听起来像 C 客户端 听起来像 C 和传输 将它们分开 并从最重要的开始 传输 这里的重大决定是您希望数据采用什么形状 您提到了协议缓冲区
  • 从 Linux 内核模块的文件描述符获取文件名/路径?

    在Linux内核模块中 有没有一种方法可以从文件名 路径中获取文件名 路径 unsigned int fd 我知道这个答案 如何从内核模块内的文件描述符获取文件名 https stackoverflow com questions 8250
  • 为什么我可以使用 ret 退出 main?

    我即将弄清楚程序堆栈到底是如何设置的 我了解到用以下方式调用该函数 call pointer 实际上等同于 mov register pc programcounter add register 1 where 1 is one instr
  • 可以匹配具有任意小数位数的非零浮点数的最短正则表达式是什么?

    可以匹配具有任意小数位数的非零浮点数的最短正则表达式是什么 它应该接受像这样的数字 1 5 9652 7 00002 0 8 0 0500 0 58000 0 01 0 000005 0 9900 5 7 5 7 005 但拒绝诸如 02
  • 当代码依赖于两个对象的子类型时,是否有设计模式可以处理

    我会尽力尽可能明确 以防有比回答我的问题更好的解决方案 我正在使用 C 工作 我有一个报告模板 可以包含任意数量的打开的 功能 功能可能是信息表 饼图 条形图 列表等 我将报告生成为文本文件或 PDF 将来可能有其他选项 到目前为止我有一个
  • 在 C# .Net 中将小数转换为小时、分钟和秒

    我在数据库中有一个分钟字段 例如 138 34 我需要将其转换回 HH MM SS 最简单的方法是什么 您可以使用TimeSpan FromMinutes minutesInDouble 以双精度格式传递上述值 欲了解更多信息 检查 MSD
  • 如何将 Ctrl+,(control 加逗号)指定为 WPF 菜单项的键盘快捷键?

    Question I would like to assign the keyboard shortcut Ctrl control plus comma to the Preferences menu item How do I do t
  • 在 fork() 之后寻求有关“文件描述符”的简单描述

    Unix 环境中的高级编程 第二版 作者 W Richard Stevens 第 8 3 节 fork 函数 描述如下 父级和子级共享相同的文件偏移量非常重要 考虑一个分叉子进程 然后等待子进程完成的进程 假设两个进程都写入标准输出作为其正
  • 使用 OpenCV 进行车牌识别

    我有一个项目 需要使用 OpenCV 识别汽车的车牌 我想加载数字或字母的图像 让 OpenCV 识别它并将其打印到控制台 有一个函数可以做到这一点吗 如果没有 我该怎么办 Note 我正在研究灰度级 请帮忙 我必须在一周后完成 谢谢你的快
  • 判断一个点是否在多面体内部

    我试图确定某个特定点是否位于多面体内部 在我当前的实现中 我正在研究的方法采用我们正在寻找多面体面的数组 在本例中为三角形 但稍后可能是其他多边形 的点 我一直在尝试根据这里找到的信息进行工作 http softsurfer com Arc
  • 列出所有会话信息

    我想在页面中显示我的asp net页面 aspx 的所有会话信息 我怎样才能做到这一点 编程语言是C 这两种方法对我有用 稍微改进和纠正了大卫的答案 第一种方法 for int i 0 i lt Session Count i var cr

随机推荐

  • Cassandra 用于无模式数据库、数十百万个订单表和每天数百万个查询

    我正在建立一个数据库 具有以下特点 每行的列数可变的无模式数据库 数千万条记录和数十列 每天有数百万次查询 每天有数千篇文章 查询将在多个列上进行过滤 不仅仅是键 我正在考虑按比例构建的 Cassandra 我的问题是 在这种情况下我需要水
  • 让 Google 搜索回归 Python

    我正在尝试从 Google 搜索中获取前 20 个结果 当我使用urllib2 urlopen 它给了我一个错误并说我被禁止了 我听说这与伪造用户代理字符串有关 但我几乎没有 urllib2 经验 如果有人可以提供帮助 我将非常感激 谢谢
  • 将列表传播到父代 sexp 中

    在任何 lisp 中是否有一种形式可以在父 sexp 中 传播 列表 喜欢 spread 1 2 3 gt 1 2 3 有两种方法可以做到这一点 哪个更好取决于您最终想要什么 一般来说 您可以使用 inside 反引号 表格如下 被评估以生
  • 如何在 SelectList 文本描述中组合两个字段?

    我想在选定的列表中放入 EF 模型人员的姓名标签 我尝试过这个 public ActionResult Insert ViewData accountlist new SelectList time Anagrafica Dipendent
  • Swift:如何扩展路径字符串中的波形符

    如何在 Swift 中用波形符扩展路径字符串 我有一个像这样的字符串 Desktop 我想使用这条路径NSFileManager方法 这需要将波形符扩展为 Users
  • Heroku:登录系统 - 身份验证循环失败

    我正在尝试登录我的 heroku 帐户 我不断收到一条错误消息 显示 您的登录出现问题 没有详细说明问题所在 我尝试通过 忘记密码 操作更改密码 但仍然被引导回到上述错误消息 我无法联系 Heroku 的支持团队 因为我无法登录 有没有人发
  • 为什么我们的 MonoTouch 应用程序会破坏垃圾收集器?并不是内存不足

    我们的问题很简单 但原因却很复杂 我们是经验丰富的开发人员 并且对可能导致此问题的原因进行了大量研究 我们希望 MonoTouch 开发人员能够与我们合作 找出人们所遇到的常见问题 以及目前尚无解决方案的问题 我们已经为此工作了两个多星期
  • 无法从scoped_dir6312_32763/internal加载扩展。管理员使用ChromeDriver Selenium禁用加载解压的扩展

    我使用 vue cli 3 创建了一个项目 它自动为我设置 e2ed 测试 当我尝试运行测试时 我从 Chrome 中收到一个弹出窗口 告诉我 管理员禁用了加载已解压的扩展 这似乎是一个常见问题 提供了一种解决方案别处 https stac
  • R闪亮有条件地改变numericInput背景颜色

    考虑以下代码 library shiny ui lt shinyUI fluidPage column 12 numericInput test h5 Test value value 500 min 0 max 10000 step 10
  • 来自环境变量的 Angular 2 基本 href

    我希望在我的 Angular 2 应用程序中为开发和生产提供不同的基本 href 我已经看到了与此类似 有些相同 的问题的答案 这里的最佳答案总结了在这些问题的所有答案中重复出现的两个解决方案 使用 ng build 从环境变量设置基本 h
  • 如何直接拨打电话?

    当我使用此代码时 首先出现带有此号码的拨号盘屏幕 Intent dialintnt new Intent Intent ACTION DIAL Uri parse tel 911 startActivityForResult dialint
  • 如何在 Svelte 中将 css 从 node_modules 添加到 template.html

    我有一个 sapperjs 应用程序 就像您通过调用获得的应用程序一样npx degit sveltejs sapper template my app 我想添加一种字体 普通人可能会添加这样一行app template html 网络原因
  • 特定 Gmail ID 的 Android 应用内沙盒设置错误

    我的项目处于 Plyatore 测试版 该项目包含按月和按年订阅 因此 我添加了一个包含 8 个 Gmail ID 的沙盒设置来测试订阅 然后我在设备帐户设置中配置每个 Gmail ID 只有两个 ID 会出现购买对话框 其余 6 个 Gm
  • Angular 6 - 预期验证器在异步验证器中返回 Promise 或 Observable

    在我的 Angular 6 应用程序中 我有异步验证器来检查输入的电子邮件是否已注册 但现在我收到 预期验证器返回 Promise 或 Observable 我真的不知道为什么 import UserService from user se
  • Android GPS 获取当前位置

    我开发了一个简单的 Android 应用程序 在这个简单的应用程序中 我想获取 GPS 纬度和经度数据 它在我的模拟器中正常工作 但当我安装在真正的 Android 设备上时 它不起作用 请帮我解决这个问题 以下是我的代码 提前致谢 pub
  • 根据浏览器宽度移动背景图像

    leavesbg background f7fff7 url images leaves4 png repeat y fixed 480px top 因此 如果页面的宽度大于 800 像素 我想将背景图像向右移动一半 也就是说 如果他们以
  • HSV三角形的公式

    不知道下面两个公式是怎么推导出来的 请解释一下 我的声望点太低了 没法去问写公式的人 C 中的 HSV 三角形 https stackoverflow com questions 42531608 hsv triangle in c sha
  • maven-checkstyle-plugin 无法在 macOS 上使用 google_checks.xml

    我有一个 Java Maven 项目 我在家里使用 Windows 构建并正确执行了 checkstyle 它使用内置规则集 但我也尝试了外部文件 查看相同的代码 pom xml 它似乎不适用于 macOS 奇怪的是如果我使用sun che
  • 如何使用 jQuery 选择没有特定类名的元素?

    像我这样的突击队怎么可能使用臭名昭著且功能强大的 jQuery Sizzle CSS 和其他所有东西 选择器来选择一个没有名为 active 的类的元素 我尝试过 a class active etc 但它没有给出足够的结果 a not a
  • OpenCV 中的相机标定和鸟瞰投影

    我已经完成了相机校准 现在我想获得棋盘图片的鸟瞰图 如下所示 但结果很奇怪 看起来不是一个正方形 你可以看到图3 每个正方形都是7 95x7 95 有人知道为什么吗 gpsPoints 0 Point2f gpsPoints 1 Point