1

我正在使用 aruco 检测标记;

   std::vector<int> ids;
   std::vector<std::vector<cv::Point2f> > corners;

    cv::aruco::detectMarkers(image, dictionary, corners, ids);
    if (ids.size() > 0)
        cv::aruco::drawDetectedMarkers(imageCopy, corners, ids);

为了使用 drawDetectedMarkers 方法,我想在标记上添加 3d 对象。我查看了用 C# 语言实现的类似项目。我拿了他们的统一对象。但是我不确定将任何 3D 对象放在标记上的最佳方法。我应该使用openscenegraph还是opengl?我也可以在这个过程中使用标记板。我实时获得了 rvec(棋盘的旋转向量)和 tvec(棋盘的平移向量)值。这是我第一次使用 3d 对象 - QT。我愿意接受所有建议。

4

1 回答 1

0

您可以利用 OpenCV Viz 库进行 3D 可视化。实际上 OpenCV Viz 是 OpenSceneGraph 的简化版本。如果您有 OpenCV 2.4 或更高版本,则默认为 Viz。它支持 OBJ 和 PLY 格式的网格文件。您可以使用 ARUCO 的 rvec/tvec 输出在 Viz 中转换 3D 对象。您可以查看我的帖子以获取示例代码段。(点击) OpenCV 2.4 版本点击这里,3.1 版本点击这里。

于 2017-01-06T15:25:13.510 回答