问题标签 [opencv-solvepnp]
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.
python - 使用 SolvePNP 进行姿势估计
我正在尝试解决几个俯瞰阿拉斯加冰川的延时摄影机的姿势。到目前为止,所有估计的姿势都非常不准确。我用于真实世界坐标的单位是 UTM(东/北)和高程。我相信我的问题在于单位错误,或者世界坐标与图像坐标不匹配。
这是我的焦距和地面控制:
焦距:5740.0 像素
世界:[3.93610609e+05 6.69557833e+06 7.82287000e+02] 图片:[479. 2448.]
世界:[3.93506713e+05 6.69585564e+06 9.61337000e+02] 图片:[164. 1398.]
世界:[3.94569509e+05 6.69555068e+06 6.21075000e+02] 图片:[2812。3853.]
世界:[3.97774e+05 6.69986e+06 1.64200e+03] 图片:[6310. 1398.]
self.tvec = (393506.713,6695855.641,961.337) self.rvec = (np.radians(0),np.radians(0),np.radians(15))
这是我的结果:姿势(北东仰角滚动俯仰偏航):
(4221680.42,2006518.54,-4807966, 83.96,-47.243,34.061)
javascript - 在哪里可以找到带有 solvePnP 的 opencv.js 或如何构建它?
大家好)我需要opencv.js中的opencv函数solvePnP。但我找不到包含 solvepnp 的版本。请您帮我找到带有solvePnP的opencv.js版本或构建它吗?你知道我在哪里可以找到其他 js 库中的 solvePnP 吗?
python - 估计矩形物体的姿态是不稳定的
我正在使用以下代码来查找矩形对象的旋转和平移向量。矩形物体的高度和宽度分别为 33 和 44 厘米。所以我使用下面的代码来创建对象点。
我使用下面的代码来确定旋转、平移向量。
由于某种原因,结果总是错误的。我是否正确创建了对象点?
javascript - 是否可以在 javascript 中仅使用模块的子部分?
对于我的项目,我只需要模块的calib3d
子部分。opencv.js
由于我正在尝试为网站创建此文件,因此整个文件/文件夹不能超过 2 MB,而其opencv.js
本身约为 13 MB。
具体来说,我只需要solvePnP
,ProjectPoints
和Rodrigues
功能。
有没有办法只提取模块的calib3d
一部分opencv.js
?
javascript - 异常捕获已禁用 - 无法捕获此异常
我正在使用 mjyc/opencv.js 版本,当我运行 cv.solvePnP 功能时,我得到了这个
当我跑步时node --trace-uncaught pnp.js
,我得到了这个。
这是我收到错误的代码块
有人明白这里发生了什么吗?
python - 函数 cvFindExtrinsicCameraParams2 中的错误 fabs(sc) > DBL_EPSILON 是什么意思?
我在 python 中使用 OpenCV (4.0.0) 中的solvePnPRansac 函数。有时(但并非总是)当我将点传递给函数时,我会收到一个错误:
在从“solvePnPRansac”(我直接使用的函数)调用的函数“cvFindExtrinsicCameraParams2”中。有谁知道这意味着什么或可能出了什么问题?
在我的用例中,我像这样使用“solvePnPRansac”:
opencv - 如何获得非纹理对象的 3d cad 模型点的 2d 对应关系?
我必须估计一个非常准确的 6D Pose 规则形状对象(如用于构造的块),没有任何纹理。我有对象的 3D CAD 模型,并且我大致知道块的坐标。所以相机向下指向物体并且可以使用立体相机或ZED
我大致知道物体上的坐标,相机将放置在距离物体约 1m 处。我想使用 OpenCVsolvePnP
方法,为此需要为对象的 3D CAD 模型点找到场景图像的 2d 对应关系。
我搜索并找到了本教程,用于纹理对象的实时姿势估计,但在我的情况下,对象是非纹理的。所以我不能使用像 SURF 或 SIFT 或 ORB 这样的关键描述符。而且我想实时使用它并作为输入来获取我的相机输入。
因此,该领域的研究主要集中在使用自然特征的跟踪上,例如基于边缘的、基于光流的、基于模板的和基于关键点的。这是否相关,所以我可以找到非纹理对象(如构造块)的 3d cad 模型点的 2d 对应关系,并且可以获得 6D 姿势?
另外,我知道存在 Harris Corners、Hough Lines、Canny Edge 或 Fast Corners 描述符,但不确定使用它们是否可以跟踪对象并找到 2D-3D 点对应关系。我可以在纹理对象的实时姿势估计中使用它们并实时修改源代码以便跟踪我的非纹理对象吗?如果是,我应该在源代码中进行哪些更改以及如何实时运行它?
任何帮助将不胜感激。
java - OpenCV 图像坐标到世界坐标的转换问题
我正在尝试使用单目相机和以下方式捕获物体的图像:
- 首先是相机的正常校准
- 然后使用世界系统和相机系统中的已知对象坐标对相机进行透视校准
在这两个步骤之后,我应该能够获得框架中任何检测到的对象的世界坐标。此链接以更详细的模式解释了我正在尝试做的事情,但与链接不同的是,我没有将 OpenCV 与 Python 一起使用,而是与 Java 一起使用。
到目前为止,我已经设法进行了正常校准,获得了相机内在参数和旋转/平移向量。我在solvePnPRansac() OpenCv 函数中使用这些参数来获得相机的外在矩阵,它允许构建投影矩阵以将点从世界坐标转换为图像坐标。以下是获得的参数:
从这一步开始,我拥有了执行第一个链接中显示的两个操作所需的一切:
现在这就是事情变得复杂的地方。当我使用世界系统坐标时,我获得了使用对象检测算法获得的正确图像系统坐标(+ - 几个像素)。但是,当我尝试进行第二次操作时,得到的结果完全没有意义。首先是我用来获取外部参数的代码:
对于第一个操作(从世界系统到图像系统):
有很好的结果,比如 (154,169,475),得到的结果是:
第二次操作的代码(从图像系统到世界系统):
对于同一点返回的坐标如下:
我真的不知道问题可能来自哪里。我多次修改代码,但算法似乎没有错。然而,我怀疑获得的外部参数,尤其是 tVecsPnP 的 Z 值,考虑到根据我的相机/世界设置它应该接近其 X 值,它太高了,但我不知道如何修复它。如果有人知道如何克服这个问题,请告诉我:) 谢谢!
opencv - 如何从相机原点沿光轴投射光线,穿过原理点并垂直于Opencv中的图像平面
对于给定的相机,我在 OpenCV 框架中有来自 solve-PnP 的 rvec、tvec 和 RMat(来自 Rodriques)。据我所知,tvec (z) 就深度而言是准确的。剩余值来自广泛的相机校准 (K) 例程,一般设置使用非 aruco 标记。
我有(1)个问题:如何从相机的原点垂直于图像平面通过沿光轴的主点投射光线?