我正在使用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成为真的呢?
发布于 2018-01-31 00:33:08
我不确定我现在所做的一切都是为了解决问题。但在一个案例中,p-a-o-l-o的答案是有帮助的。因为有时ceres-solver不会被加载,如果版本是较新的版本或其他版本。所以我定义了
#define CERES_FOUND true包括bevor I
#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);https://stackoverflow.com/questions/48499827
复制相似问题