问题标签 [perspectivecamera]

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 投票
3 回答
3213 浏览

matlab - 在 Matlab 中计算 opencv 透视变换时出错

我正在尝试使用mexopencv将特征匹配和单应性重新编码。Mexopencv将 OpenCV 视觉工具箱移植到 Matlab 中。

我在 Matlab 中使用 OpenCV 工具箱的代码:

错误:

问题从检查开始perspectiveTranform(boxCorners, H),直到发现homography它很好。另请注意,在从样本和场景计算匹配坐标时,我从2:end, 开始索引box = [boxPoints([matches(2:end).queryIdx]).pt],因为访问queryIdx第一个元素的 将产生无法访问的第零个位置。不过,我认为,这不会是一个问题。无论如何,我期待我的解决方案的答案。谢谢。

PS:这是我在这里的原始帖子的编辑版本。我在下面收到的解决方案不够充分,并且该错误不断重复。

第二次更新:

根据@Amro,我已经更新了我的代码,如下。内点给出了很好的响应,但是计算透视变换的坐标不知何故被扭曲了。

输出很好,但是perspectiveTranform没有给出适合问题的正确坐标。到目前为止我的输出:

输出

第三次更新:

我已经让所有的代码都在运行并且对单应性很好。然而,一个角落里的情况让我很难受。如果我这样做imgObj = imread('D:/pic/box.png')imgScene = imread('D:/pic/box_in_scene.png')我会得到很好的单应矩形,但是,当我这样做时imgScene = imread('D:/pic/box.png'),即对象和场景是相同的,我会得到这个错误 -

现在,我过去遇到过这个错误,当ptsObjor的数量ptsScene很低时会发生这种情况,例如,当场景只是白/黑屏幕时,该场景的关键点为零。在这个特殊的问题中,有大量的ptsObjptsScene。问题出在哪里。我已经使用SURF相同的错误 resurfacing 测试了这段代码。

0 投票
0 回答
711 浏览

three.js - three.js TextGeometry:重新设置旋转后文本对齐变得混乱

我创建了三个。TubeGeometry 并使用 THREE.TextGeometry 将文本添加到创建的管中。然后将管添加到场景中。此外,我已将文本旋转设置为相机旋转。代码片段如下

我的应用程序有一个按钮,通过它我可以重置管几何的原始位置。在内部,这是通过将相机重置到其原始位置来完成的。

最初,当页面加载时,管和文本正确对齐并面向用户。但是当我旋转管并将其重置到原始位置时,管正确地回到原始位置,但文本随机朝向任何方向。

我的基本要求是文本应该始终面向用户。我已按照另一个相关查询中提到的步骤进行操作:

TextGeometry 总是面对用户?

但即使我按照建议的方式编码,我也面临上述问题。请指出我缺少什么?

注意:我正在使用透视相机。

0 投票
0 回答
641 浏览

opencv - 使用一台单声道校准相机进行人体身高估计

我正在研究一种算法来估计视频中检测到的人的高度,但我被卡住了。

我工作的部分是使用 HoG 算法检测人,所以我为框架中的每个人都有一个边界框。而且我已经校准了相机,所以我有我的内在和外在相机参数。

问题是现在我有一个带有 2 个未知数的透视投影公式:物体的高度和物体到相机的距离。我正在使用一个单声道网络摄像头来检测人,所以我没有关于物体到摄像头距离的信息。高度是我要估计的,所以我也没有。

我知道如果我使用 kinect 或立体摄像头来获取距离,这个问题是可以解决的,但我仅限于一个单声道网络摄像头。

有谁知道如何解决这个问题?我已阅读有关使用引用对象的信息,但我不知道如何使用它们来解决我的问题。

0 投票
2 回答
606 浏览

opengl - gluPerspective 在角落有消失点。开放式

我正在使用 pyglet:http ://www.pyglet.org/来使用 opengl。但是,我有一些问题。

我的消失点出现在屏幕左下角(0,0)的角落。下图应显示说明这一点:http: //i.imgdiode.com/0wu5E0.png

左边是我现在看到的立方体。右边是它应该如何(我希望它如何)看起来。我怎样才能做到这一点?

另外,我读了一些关于矩阵模式的文章,似乎 GL_PROJECTION 应该与 gluPerspective 一起使用。但是,当我将它们一起使用时,透视效果就消失了。只有在 GL_MODELVIEW 中 gluPerspective 才能工作。我很困惑为什么会这样。

以下是我用来显示对象的代码。

0 投票
2 回答
3716 浏览

opengl - glFrustum、gluPerspective 和 FOV

我有一个程序来做增强现实,我在 OpenGL 中使用:

没关系,我得到了很好的视角,并且我的 3D 对象很好地插入了我的照片。现在我希望能够放大/缩小。通常,它是通过更改 gluPerspective 中的 fov 来完成的,但我不使用 gluPerspective,因为我无法获得良好的插入。

使用http://dmi.uib.es/~josemaria/files/OpenGLFAQ/transformations.htm,问题“9.085 如何调用与我对 gluPerspective() 的调用相匹配的 glFrustum()?”,我尝试了:

void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far);

void gluPerspective(GLdouble fovy, GLdouble aspect,GLdouble near, GLdouble far);

接着 :

但是我的对象被扭曲了,它没有在所有轴上正确缩放,没有保持比例。

那么我需要做什么/修改我的 glFrustum 参数以获得放大/缩小效果?

0 投票
0 回答
128 浏览

rotation - 在 Direct3D9 上切割的旋转立方体

我试图在 Direct3D9 上显示一个旋转的立方体。我可以成功绘制它,但是在旋转过程中没有绘制一些像素。我想在旋转过程中展示立方体的每个部分。每个面的大小为 0.5f,并且从点 0、0、0 随 Pitch Yaw Roll 旋转。我尝试禁用 Z 缓冲区或设置视口的高 Z 值但没有成功。有什么建议吗?哦,我正在以线框模式渲染它。 剪切图像

编辑:我确认问题出在 Z 缓冲区上。我试图在 Z 轴之间平移立方体,很明显视图在 0.0 和 1.0 之间,但 SetViewport 并没有改变它,我不明白为什么......

编辑:如果我禁用 ZBUFFER,顶点仍然会被切割。我尝试使用参数 (m, 90, 800 / 480, -0.1, 100) 使用 此实现 ( http://pastebin.com/EVCRG6f7 ) 设置一个新的投影矩阵,但问题仍然存在。剪切图像 2

编辑:我尝试使用 OpenGL 使用在 Direct3D9 上使用的相同顶点和视图矩阵,并且我的立方体正确绘制。我用这些值初始化它:

0 投票
2 回答
3023 浏览

python - Opencv:好的点匹配但错误的单应性

我正在尝试提取两个图像之间的单应矩阵。原始平面图像和包含第一个平面图像的另一个图像。我正在按照本教程https://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_feature_homography/py_feature_homography.html#feature-homography中的步骤进行操作。

找到的匹配看起来很棒,但是在绘制包含图像的框时,它看起来不对,因为它不包含图像......但是其中一个边框是好的......那么发生了什么?单应矩阵是错误的还是只是一个可视化问题?

错误的边界框

我的一段代码如下所示:

编辑:将角落的顺序更改为:

我得到类似的东西:

bb2

bb3

这看起来有点不同,但仍然不是我所期望的。

0 投票
1 回答
63 浏览

python-2.7 - y/z 平面上的透视投影

因此,此维基百科页面向您展示了如何将 3d 空间中的点透视投影到 x/y 平面上。有谁知道如何在 y/z 平面上进行等效操作?这就是我现在正在做的事情(只是维基百科页面的东西。):

您可以在github repo中查看所有代码。特别是其中的文件是 shapes.py。

0 投票
1 回答
180 浏览

opengl - LWJGL 投影视图错误?

所以,我真的不知道如何解释我目前遇到的问题,但我知道它涉及用于绘制立方体的模型/视图/投影矩阵。我已经从搅拌机中导入了一个立方体,现在我正在尝试创建一个相机系统来从不同的角度查看。我首先将缩放、旋转和平移应用到立方体,然后将此矩阵发送到我的顶点着色器类,立方体出现在它应该出现的位置,大小正确,并且在我给它的任何方向上旋转。下一步是设置相机视图,所以我将立方体的当前世界坐标乘以一个视图矩阵,这样我就可以移动“相机”并从不同的方向看。所以现在我有了相机坐标,一切看起来都应该如此。立方体仍在旋转,当我更换“相机”时 立方体按应有的方向旋转。所以最后,当我将投影矩阵添加到着色器时,一切看起来都正常......最初。但是,我注意到立方体看起来不再正确了。我现在可以旋转/移动相机,但是立方体看起来变形了,一些面不是方形的。现在奇怪的是,如果我真的靠近立方体,几乎就像所有在外面的颜色都在里面,你可以看到一个完美的立方体形状。这是它正在做的事情的链接,因为这可能真的很难理解:但是立方体看起来变形了,一些面不是方形的。现在奇怪的是,如果我真的靠近立方体,几乎就像所有在外面的颜色都在里面,你可以看到一个完美的立方体形状。这是它正在做的事情的链接,因为这可能真的很难理解:但是立方体看起来变形了,一些面不是方形的。现在奇怪的是,如果我真的靠近立方体,几乎就像所有在外面的颜色都在里面,你可以看到一个完美的立方体形状。这是它正在做的事情的链接,因为这可能真的很难理解: http://youtu.be/QHY7ZVADeiQ。下面是我用来变换立方体的代码 (ModelTransformation)、相机类的代码以及我的顶点着色器的设置方式。任何想法将不胜感激。我为巨大的代码块道歉。

模型转换类:

相机类:

顶点着色器:

编辑:添加了更多可能有帮助的类并添加了更多标签

渲染实用程序类:

游戏类:

0 投票
0 回答
1851 浏览

coordinates - JavaFX JDK 8:围绕坐标系转动相机时,而不是鼠标坐标

我非常坚持我的应用程序,我没有看到任何有人在做我正在做的事情的例子。 https://www.dropbox.com/sh/lqzoegg5v8drzog/nLxDuIVAh0

我有一个 3D 世界,我将 TriagleMesh 对象从 STL 文件加载到 3D 世界中。3D 世界是使用 Oracle 使用 xforms 的许多示例创建的。我可以在 3D 世界中转动相机,一切都很好。

当 3D 世界向右有 X+ 并且我用鼠标向右移动我的对象时,对象实际上是向右移动的。当我转动世界以使 X+ 向左移动时,当我将鼠标向右移动时,对象向左移动

应用程序当前在 MouseEvent 拖动事件处理程序上使用 getScreenX 和 getScreenY。我已经尝试过 getSceneX 和 getSceneY 并且它的行为方式相同。当我使用 getX 和 getY 时,对象会到处乱跳,从 getX 和 getY 返回的坐标会不断变化。这很可能是因为对象正在移动,并且 getX 和 getY 坐标返回鼠标在移动之前相对于对象的位置。假设我确实使用了 getX 和 getY 并且我旋转了对象,然后它的坐标系发生了变化。如果它在右边有 X+,它将在左边。因此,如果我然后尝试将对象向右移动,它会向左移动

我想我需要使用 getScreenX/Y 然后根据相机的旋转以某种方式转换鼠标坐标。我将如何在 JavaFX 中做到这一点?

编辑 1 排序

我在这个 jira https://javafx-jira.kenai.com/browse/RT-35178中获得了以下代码

我所做的是将拖动检测到的代码放在我的 Gizmo 对象中。Gizmo 会将 MouseTransparent 设置为 true 并 startFullDrag。然后它调用 GizmoViewer 以便 GizmoViewer 可以设置 mousePlane MouseTransparent。这允许鼠标平面而不是 Gizmo 检测到拖动。我还在 GizmoViewer 中设置了一个标志 dragJustStarted = true; 然后当我开始拖动并且在 mousePlane 上触发 OnMouseDragOver 时,它将设置 mouseOldX、mousePosX、mouseOldY、mousePosY 的值,如果它检测到这是第一次执行拖动,它将退出。当拖动再次执行时,我拥有所有正确的鼠标值,我可以微笑着拖动

鼠标平面的设置

检测到 Gizmo/屏幕对象拖动

释放 Gizmo 鼠标(对这个问题很重要的方法刚刚开始)

小工具查看器