OpenCV 的 findHomography 产生无意义的结果

2024-04-29

我正在制作一个程序,使用 OpenCV (2.43) 中的 ORB 跟踪功能,我遵循并使用了建议从这里 https://stackoverflow.com/questions/9919505/how-can-i-extract-fast-features-from-an-image.

我的目标是跟踪视频源中的对象(脸部)并在其周围绘制一个矩形。

我的程序找到关键点并正确匹配它们,但是当我尝试使用findHomography + perspectiveTransform为图像找到新的角点通常会返回一些无意义的类型值(尽管有时它会返回正确的单应性)。

Here is an example picture: example

这是相应的有问题的部分:

Mat H = findHomography( obj, scene, CV_RANSAC );  

//-- Get the corners from the image_1 ( the object to be "detected" )
std::vector<Point2f> obj_corners(4);
obj_corners[0] = cvPoint(0,0); obj_corners[1] = cvPoint( img_object.cols, 0 );
obj_corners[2] = cvPoint( img_object.cols, img_object.rows ); obj_corners[3] = cvPoint( 0, img_object.rows );
std::vector<Point2f> scene_corners(4);

perspectiveTransform( obj_corners, scene_corners, H);

//-- Draw lines between the corners (the mapped object in the scene - image_2 )
line( img_matches, scene_corners[0] + Point2f( img_object.cols, 0), scene_corners[1] + Point2f( img_object.cols, 0), Scalar(0, 255, 0), 4 );
line( img_matches, scene_corners[1] + Point2f( img_object.cols, 0), scene_corners[2] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 );
line( img_matches, scene_corners[2] + Point2f( img_object.cols, 0), scene_corners[3] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 );
line( img_matches, scene_corners[3] + Point2f( img_object.cols, 0), scene_corners[0] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 );

其余代码实际上与我提供的链接中的相同。 绘制的线条看起来完全随机,我的目标只是在新场景中获得源对象的最小矩形,因此如果有使用单应性的替代方法也可以。

附:要跟踪的源图像是从视频输入复制的区域,然后在该输入的新图片中进行跟踪,这重要吗?


功能perspectiveTransform在假设相应点集不易出错的情况下估计单应性。然而,在现实世界的数据中,你不能这样假设。解决方案是使用稳健的估计函数(例如 RANSAC)将单应性问题作为超定方程组来求解。

您可以使用findHomography相反,它返回单应性。该函数的输入是一组点。该组至少需要 4 点,但组越大越好。单应性只是一个估计,但对错误的鲁棒性更强。通过使用CV_RANSAC标记它能够在内部删除异常值(错误的点对应)。

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

OpenCV 的 findHomography 产生无意义的结果 的相关文章

随机推荐

  • 通过 javascript 按名称引用 HTML 元素(其中带有方括号)

    大家好 我正在尝试根据是否选中复选框或是否从下拉框中选择特定值来隐藏 显示不同的 html 元素 div 等 我想知道是否有人可以帮助我 html 元素是按照此 如下 的方式定义的 我不确定如何通过带有括号的名称来引用它 我正在使用的页面启
  • 使用 jQuery 动态创建并“单击”链接

    我想动态创建一个 a href 元素 然后 单击 它 全部无需修改页面 我正在尝试这个 a href nbsp a click 无济于事 它不是jquery 但它工作得很好 var link document createElement a
  • 概念面无法映射到物体面?

    我使用实体框架和 Db First 方法 我曾经有一个名为 Ranking 的表 我将其映射到带有一些继承的具体类的抽象基类 现在 我最近删除了所有继承 并选择只使用一个名为 Ranking 的具体类 但自从我把它改回来后 我得到以下运行时
  • PyCharm 找不到已安装的软件包:keras

    我在运行 Ubuntu 14 04 的 PC 上安装了 pycharm 2016 1 4 我已经使用安装了 Keras 一个 Python 包 pip install keras和 PyCharmcan找到它before 但它cannot找
  • redis 阻塞直到 key 存在

    我是 Redis 新手 想知道是否有办法能够await get通过它的键来获取值 直到该键存在 最小代码 async def handler data await self fetch key async def fetch key ret
  • 将预训练模型从 tfhub 转换为 tflite

    我正在尝试转换openimages v4 ssd mobilenet v2 https tfhub dev google openimages v4 ssd mobilenet v2 1到 tflite 使用 pip3 install te
  • JavaScript 中的 function($) 是什么意思?

    我意识到 只是命名指向 jQuery 对象的变量的约定 也是 document getElementById 的函数 但是 function 意味着什么吗 编辑 我其实是想说 function jQuery 抱歉造成混乱 但感谢您的回答 一
  • dmesg 和 /var/log/kern.log 之间的区别

    我正在修改kvm模块 并在内核代码中添加了printk语句 运行虚拟机后 printk为我提供了错误地址和有关客户操作系统的其他信息 我需要根据此信息生成统计信息 当我使用 dmesg 时 我只能看到错误地址 在内核空间中 即它们的地址高于
  • 警告:implode() [function.implode]:传递的参数无效

    我收到以下错误 警告 implode function implode 在第 1335 行的 wp content themes mytheme functions php 中传递的参数无效 at function my get tags
  • 如何平滑过渡 CSS 背景图片?

    主要的解决方案是 只需抛出一个加载屏幕 直到页面加载完毕 但我的目标是构建能够快速呈现基础知识的页面 无需加载屏幕 然后在图像和精美功能准备就绪时进行转换 所以我会等到它加载完毕 然后淡入 或者我会加载一个非常低分辨率的版本 然后在准备好时
  • PyCharm 未使用环境变量进行更新

    当我使用vim更新我的环境变量 在 bashrc PyCharm 不会立即获取更新 我必须关闭程序 源 bashrc再次 然后重新打开 PyCharm 有没有办法让 PyC harm 自动获取更改 或无需关闭 当任何进程创建时 它都会从其父
  • 获取自分离父分支以来的提交日志,包括父分支的最新提交

    我正在尝试创建一个快速的 bash 函数 该函数返回 oneline自当前分支从其父分支分支以来的每次提交的日志 以及包括先前提交的行 这是我到目前为止所拥有的 stolen from another Stack Overflow ques
  • 如何获取一维标量数组作为学说 dql 查询结果?

    我想从拍卖表的 id 列中获取一组值 如果这是一个原始 SQL 我会写 SELECT id FROM auction 但是当我在 Doctrine 中执行此操作并执行时 em gt createQuery SELECT a id FROM
  • 为什么 Java Swing html 字体渲染看起来这么糟糕?

    为了显示具有多种样式的复杂多行标签 我使用了 Swing 的 html 渲染功能 但最终得到了非常糟糕的字体渲染 我尝试明确设置字体系列 infoLabel setText span style font family Tahoma My
  • Json.NET:将嵌套数组反序列化为强类型对象

    我正在编写客户端应用程序 它应该处理服务器响应 响应采用 JSON 格式 我决定使用 Json NET 来反序列化它们 我无法简化或修改这些响应 在服务器端 此特定 JSON 响应的特殊困难在于不同的对象类型位于同一数组中 哈希值和文件数组
  • Numpy 提取网格数据的子集

    在我的应用程序中 我有一个从 meshgrid 命令获得的值矩阵及其坐标 经度 纬度 我想根据经度和纬度限制提取该矩阵的特定子区域 我已经尝试过这个解决方案 但它不起作用 我需要三个矩阵作为输出 一个用于数据 另外两个用于网格 Lons L
  • 应用程序突然崩溃 - 致命执行引擎错误 (7A0BC59E) (80131506)

    完全随机 我们的应用程序突然在其生产环境中崩溃 该应用程序在 Windows XP 和 net Framework 3 5 sp1 上运行 在应用程序中 我们提供 WCF 服务并使用串行端口 当应用程序崩溃时 它会在应用程序日志中留下消息
  • React Native 中的平台特定组件

    我很确定这很简单 但我不太明白如何将它们结合在一起 目前我的应用程序在 iOS 中运行良好 但我使用了一些与 Android 不兼容的控件
  • java中的引用传递[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我是java新手 我尝试搜索很多我的
  • OpenCV 的 findHomography 产生无意义的结果

    我正在制作一个程序 使用 OpenCV 2 43 中的 ORB 跟踪功能 我遵循并使用了建议从这里 https stackoverflow com questions 9919505 how can i extract fast featu