问题标签 [homography]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
356 浏览

object - 在 OpenCV 中使用 SURF 定义检测到的对象宽度

我正在一个机器人项目下工作。在 opencv 上使用 SURF 进行对象检测。我在物体检测网上发现了很多代码。我没有准确找到图像中对象的宽度及其角的坐标?

而且,是否可以定义物体到凸轮的距离?

任何帮助将不胜感激

0 投票
2 回答
22521 浏览

opencv - 如何使用 Homography 在 OpenCV 中转换图片?

我有两张图片(A 和 B)与另一张略有扭曲,它们之间存在平移、旋转和比例差异(例如,这些图片:)

原版莉娜 扭曲的莉娜


Ssoooooooo 我需要的是在图片 B 中应用一种转换,以便补偿存在的失真/平移/旋转,以使两张图片具有相同的大小、方向且没有平移

我已经提取了点并找到了 Homography,如下所示。但我不知道如何使用 Homography 进行转换Mat img_B,所以它看起来像Mat img_A. 任何想法?

干杯,

0 投票
0 回答
231 浏览

c++ - 对虚拟监视器使用单应性

我目前正在做一个项目,我需要在游戏期间创建一个虚拟屏幕以获取反馈

我的程序在跟踪位置绘制图像。我不想让这个图像跟随我的 4 个跟踪点,所以它可以缩放和旋转。

我需要的是让单应性工作,我很抱歉问这个问题,因为我知道有很多不同的文章,我一直在尝试阅读其中很多,但他们没有对我来说没有多大意义。我现在面临的问题是我不知道该怎么做。

我可以让它缩放图像的纹理或内容,但它保持相同的高度和宽度格式。它现在不旋转它,因为我还没有它的更新功能,我也不知道如何创建它。我需要它来拉伸图片本身,以便它根据跟踪的点进行缩放。

通过这篇文章,我希望你能在正确的方向上帮助我,以便相应地缩放我的图像格式,这对我来说将是一个重大突破。

我在 Windows 7 上的 Codeblocks (C++) 中使用带有 openCV 和 ofxCV 插件的 openframeworks。

ofxCv 的插件中有一些功能,我很困惑:例如,我不太了解"imitate();"它的工作原理和作用。这既不是:

和:"warpPerspective(origImg, warpImg, homography, CV_INTER_LINEAR);"

我不确定我是否正确使用了这些,并且很难找到关于这些的适当文档,这对我来说很有意义。

我怀疑的另一件事是在这项任务中使用矩阵。

正如您可能已经知道的那样,我真的不是一个经验丰富的程序员。任何正确方向的帮助将不胜感激!

这是所有代码的粘贴:http: //pastebin.com/MFfJqGZ1 最有趣的部分,或者我个人认为我遗漏了什么或做错了什么是在第 199-223 行之间。这是头文件: http: //pastebin.com/XfQySAmh

非常感谢提前

最好的问候杰斯珀

0 投票
1 回答
2056 浏览

opencv - 从单应性opencv中查找相机方向

如果我有一个已经校准的相机,那么我已经知道失真系数和相机矩阵。而且我有一组都在一个平面上的点,并且我知道这些点的真实世界度量和像素位置,我已经构建了一个单应性。

鉴于这个单应性、相机矩阵和失真系数,我怎样才能以最简单的方式找到相机姿势?最好使用openCV。

例如,我可以使用“DecomposeProjectionMatrix()”函数吗?它只接受一个 3x4 投影矩阵,但我有一个简单的 3x3 单应性

0 投票
1 回答
258 浏览

opengl - Opengl 2D绘图不平行于屏幕

我认为我绘制的 2D 平面与屏幕不平行。

首先,在我的调整窗口大小函数中,我放了:

这是我初始化opengl的方法。

和绘图功能:

我认为代码没有问题,因为我已经为 ModelView 和 Projection 加载了标识。我画的结果是,如果我的矩形与水平线平行,那么它就是一个矩形,当转动某个角度时,它就变成了倾斜的。似乎我正在绘制的飞机向后倾斜。

0 投票
0 回答
2782 浏览

opencv - 如何在 JavaCV 中使用单应矩阵 (3x3) 执行透视变换?

一段时间以来,我一直在尝试从任意角度拍摄台球桌的图像,定位四个角的坐标对 (x,y),然后旋转/扭曲图像,以使生成的图像仅包含来自鸟瞰图。我正在使用 JavaCV 来完成这项任务。到目前为止,我已经编写了成功计算表格四个角的代码,如下所示(我在四个角上编写了半径为 25 的红色 cvCircles)。

在此处输入图像描述

找到我的四个角后:
角 1(右下)X:3234 Y:1858
角 2(左下)X:0 Y:1801
角 3(右上)X:2722 Y:1069
角 4(左上)X: 523 岁:1030

我尝试使用 cvFindHomography 然后使用 cvWarpPerspectve 来完成此操作。我的代码可以在下面找到:


我获得的 3x3 单应矩阵是:
[ 0.0011688289, 7.928632E-4, -1.4279466
-8.698455E-5, 0.0049045905, -5.006235
-2.8205379E-5, 0.0015696458, 1.0 ]

**不幸的是,结果是一个纯黑色的图像,里面什么都没有。我是在错误地接近这个吗?任何建议、代码、伪代码等都将不胜感激!

非常感谢您的阅读。**

0 投票
2 回答
4591 浏览

c++ - 使用 Levenberg Marquardt 算法的单应性计算

OpenCV 中的 findHomography() 函数查找两个平面之间的透视变换。使用 Levenberg-Marquardt 方法进一步细化计算出的单应矩阵(仅在稳健方法的情况下使用内点),以进一步减少重投影误差。任何人都可以提供任何指向 Levenberg Marquardt 算法的 C/C++ 代码链接,这是最小化误差函数所需的,因为它将帮助我理解算法背后的数学。(网络上到处都只上传了库或特定代码,但没有上传算法的详细代码)。

0 投票
1 回答
1982 浏览

python - 通过了解 OpenCV 中的单应性计算视频中的物体高度

我正在尝试测量在我使用 OpenCV 和 Python 开发的跟踪应用程序中检测到的对象的高度。我已经计算了单应矩阵,所以我知道每个对象在现实世界中的位置以及它在视频帧上的表观高度。我不知道的是相机的真实世界位置。我已经看到可以从单应性计算相机姿势矩阵,但我不知道该怎么做。

视频是从头部水平录制的,对象主要是人。单应性将相机像素转换为地面。

可以通过将最左边和最右边的坐标转换为真实世界坐标并测量它们之间的距离来测量对象的宽度。如何计算高度?

0 投票
1 回答
1739 浏览

computer-vision - 单应性估计 - >产生仿射矩阵?

我正在从平面标记(使用 Matlab)开发姿势估计系统。为了做到这一点,我在使用网络摄像头捕获的图像中检测一个矩形,获取 4 个角点的坐标并计算这些角点在齐次坐标中的单应性,例如

其中第一行是垂直坐标,第二行是水平坐标。

我用 DLT 计算这些点和参考点之间的单应性(使用我在网上找到的几种不同的单应性计算函数,以及 Matlab 的 cp2tform,它们都给出相同的结果),因为我知道标记是一个正方形,

[编辑:它们都按逆时针顺序排序,所以我确保它们匹配。]

然后我绘制这些参考点的重投影

回到网络摄像头图像,以查看单应性的拟合程度。

结果很好,因为我只围绕 z 轴旋转(即把它放在网络摄像头前面并手动倾斜它)标记(=标记的范数向量);重新投影的点几乎完全投影到较早检测到的标记角点上,并且分解的 z 轴角度计算得很好。

但是,如果我围绕 x 和/或 y 轴旋转标记,则重新投影的点会逐渐偏离很多。然后我意识到计算出的单应矩阵 H 几乎是一个仿射矩阵,例如 H=

(无论我如何倾斜标记,元素 h31 和 h32 几乎为零)这可以通过查看重新投影的点来确认,这些点看起来总是仿射变换的结果,而不是投影变换的结果。不出所料,x 轴和 y 轴的分解角度几乎为零/等于零。

显然我在网上找到的函数不能都得到单应性计算错误,Matlab的cp2tform也不能,但不幸的是我没有看到或理解我的错误是什么。它必须在像素坐标的使用中,但由于查看许多单应性解释并搜索“单应性估计结果仿射”没有产生任何结果,如果有人能指出我正确的方向,我会很高兴。

谢谢。

0 投票
2 回答
5606 浏览

opencv - OpenCV CV findHomography 断言错误 - 计数器 => 4

我目前正在完成我的兴趣点检测器评估工具。在最后的步骤中,我发现了一个令人困惑的错误。

srcPointsdstPoints是存储匹配关键点的vector<Points2f>对应点。到目前为止没有什么特别的 - 就像在教程中一样。

但是当我使用 RANSAC 并且vector<Points2f>在 [0, ... , 4] 范围内时,我得到一个断言错误,而不是计数器应该大于或等于四。

问题1:算法是否需要至少四个点来描述什么属于当前模型并创建共识?

问题 2:是否有关于此的任何文档?(我看了看文档教程。)

请注意,我已经看过这个问题。但对于 RANSAC 的行为,并没有令人满意的答案。还是我应该接受这种方法至少需要四个点才能找到单应性?

谢谢你的帮助。