【问题标题】:OpenCV: reconstruct() not foundOpenCV:未找到重建()
【发布时间】:2018-01-29 11:08:04
【问题描述】:

我正在使用 QT,我想尝试 OpenCV 中的 cv::sfm::reconstruct() 函数。但我无法构建它,因为他们说命名空间 cv::sfm 中没有重构。

如果我没有安装 ceres-solver,我知道 cv::sfm::reconstruct() 将被禁用。所以我在自制软件上安装了 ceres-solver。

使用 QT,我添加了所有库和头文件,如下所示:

INCLUDEPATH += /usr/local/include/eigen3/ \
/usr/local/Cellar/ceres-solver/HEAD-202dd9f_4/include/ \
/usr/local/include/OpencvHeader/
LIBS += -L/usr/local/Cellar/ceres-solver/HEAD-202dd9f_4/lib -lceres
LIBS += -L/usr/local/lib -lopencv_core -lopencv_sfm ...

因为我仍然遇到同样的问题,所以我认为我在加载标头或库时做错了,我希望这里有人可以帮助我解决这个问题。

或者我怎样才能让 CERES_FOUND 为真?

【问题讨论】:

标签: c++ qt opencv


【解决方案1】:

我不确定我现在用什么来解决问题。但在一种情况下,p-a-o-l-o 的回答很有帮助。因为有时如果版本是较新的版本或其他版本,则不会加载 ceres-solver。所以我定义了

#define CERES_FOUND true

因为我包括了

#include<opencv2/sfm.hpp>

我还添加了定义

#define OPENCV_TRAITS_ENABLE_DEPRECATED

在那之前。最后一件事是,他们展示的示例不再有效。我试图用这样的字符串向量加载我的图像:

    bool is_projective = true;
    vector<Mat> Rs_est, ts_est, points3d_estimated;
    Matx33d K = Matx33d(f, 0, cx,
                        0, f, cy,
                        0, 0, 1);

    std::vector<string> images_paths;    
    reconstruct(images_paths, Rs_est, ts_est, K, points3d_estimated, is_projective);

不知何故,它会出错。您还可以找到此示例的正确版本here。它表明他们使用的不是字符串而是字符串。

我不知道为什么其他字符串类型会出现问题,但从那以后它对我有用。所以正确的代码是:

        std::vector<String> images_paths;    
        reconstruct(images_paths, Rs_est, ts_est, K, points3d_estimated, is_projective);

【讨论】:

    猜你喜欢
    • 2014-07-14
    • 2015-08-30
    • 1970-01-01
    • 2020-10-27
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    相关资源
    最近更新 更多