gpt4 book ai didi

c++ - 根据照片以3D计算对象位置

转载 作者:行者123 更新时间:2023-12-02 17:23:49 24 4
gpt4 key购买 nike

我正在研究某种AR,在其中通过C++算法中的OpenCV找到图像标记。之后,在JS(Three.js)中,我要在此位置上投影一些3D对象。

这种2D图像跟踪效果很好。从关键点单应性计算得出的输出是4个相当精确的2D点。

但是,当我想计算这些角在空间中的3D位置时,我迷失了。我该怎么做?

最佳答案

因此,经过一些研究,我(重新)在OpenCV中发现了函数solvePnP

我不想第一次使用它的原因是,尽管如此,我只能将其用于3D对象。不是2D。但是解决方案是,只需将0 Z位置添加到3D对象坐标即可。

在Python中,如下所示:

object_points = np.array([
(-target_image_height / 2, -target_image_width / 2, 0),
(-target_image_height / 2, target_image_width / 2, 0),
(target_image_height / 2, target_image_width / 2, 0),
(target_image_height / 2, -target_image_width / 2, 0),
], dtype=np.float32)

之后,只需添加相应的2D坐标即可:
corners = np.array([
[ 643.63635, 1113.8246 ],
[ 1290.5548, 1073.5529 ],
[ 1223.0352, 2609.2234 ],
[ 624.71985, 2441.5803 ],
])

并调用 solvePnP:
retval, rvec, tvec = cv2.solvePnP(object_points, corners, np.array(calibration_data['mtx']), np.array(calibration_data['dist']))

注意:相机校准矩阵会在结果上产生巨大差异。因此,您需要通过棋盘或类似方法对其进行校准。

输出是摄像机的旋转和平移 vector 。

关于c++ - 根据照片以3D计算对象位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60703400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com