opencv_contrib 编译错误:类没有成员

Posted

技术标签:

【中文标题】opencv_contrib 编译错误:类没有成员【英文标题】:opencv_contrib compilation error: class has no member 【发布时间】:2015-11-09 05:12:38 【问题描述】:

我必须实现图像拼接的 SURF 算法。我在使用库时遇到了问题,如所列 here

在尝试了我能找到的解决方案后,我删除了 opencv 并开始从头开始构建。我尝试在安装过程中包含“opencv_contrib”库,但没有成功。

所以我安装了opencv,然后尝试按照包的github repository 告诉集成包。期间 使-j2 行,我不断收到以下错误。

[ 77%] Building CXX object modules/ximgproc/CMakeFiles/opencv_ximgproc.dir/src/sparse_match_interpolators.cpp.o
In file included from /home/akshat/OpenCV/opencv-3.0.0/modules/core/include/opencv2/core.hpp:54:0,
                 from /home/akshat/OpenCV/opencv-3.0.0/build/modules/ximgproc/precomp.hpp:40:
/home/akshat/opencv_contrib/modules/ximgproc/src/sparse_match_interpolators.cpp: In member function ‘virtual void cv::ximgproc::EdgeAwareInterpolatorImpl::interpolate(cv::InputArray, cv::InputArray, cv::InputArray, cv::InputArray, cv::OutputArray)’:
/home/akshat/opencv_contrib/modules/ximgproc/src/sparse_match_interpolators.cpp:171:52: error: ‘const class cv::_InputArray’ has no member named ‘isVector’
     CV_Assert( !from_points.empty() && from_points.isVector() &&
                                                    ^
/home/akshat/OpenCV/opencv-3.0.0/modules/core/include/opencv2/core/base.hpp:389:33: note: in definition of macro ‘CV_Assert’
 #define CV_Assert( expr ) if(!!(expr)) ; else cv::error( cv::Error::StsAssert, #expr, CV_Func, __FILE__, __LINE__ )
                                 ^
/home/akshat/opencv_contrib/modules/ximgproc/src/sparse_match_interpolators.cpp:172:52: error: ‘const class cv::_InputArray’ has no member named ‘isVector’
                !to_points  .empty() && to_points  .isVector() &&
                                                    ^
/home/akshat/OpenCV/opencv-3.0.0/modules/core/include/opencv2/core/base.hpp:389:33: note: in definition of macro ‘CV_Assert’
 #define CV_Assert( expr ) if(!!(expr)) ; else cv::error( cv::Error::StsAssert, #expr, CV_Func, __FILE__, __LINE__ )
                                 ^
make[2]: *** [modules/ximgproc/CMakeFiles/opencv_ximgproc.dir/src/sparse_match_interpolators.cpp.o] Error 1
make[1]: *** [modules/ximgproc/CMakeFiles/opencv_ximgproc.dir/all] Error 2
make: *** [all] Error 2

提前致谢

【问题讨论】:

现在我很困惑。请填写信息中的空白。 1)你为什么“删除”opencv?之前是作为二进制包安装的吗? 2) 详细说明您的步骤: 2.1) 您使用什么版本,从哪里(如果它不是 the 官方网站上的 the 官方版本)? 2.2)关于“我在安装过程中尝试包含‘opencv_contrib’库,但没有成功。”和“安装的opencv”-不确定这意味着什么。没有规范的“安装”意味着从存储库安装预构建的包... ...3) “尝试按照指示集成包” - 链接上的自述文件讲述了如何构建 opencvwith 编译的额外模块。但你是说你只是单独构建额外的模块? 我通过执行给定here 的shell 文件安装了opencv。然后在搜索如何安装 opencv_contrib 时,我遇到了告诉我在设置 opencv 时安装它的链接。所以,我卸载了opencv。在尝试使用 opencv_contrib 模块安装时,我在构建代码时遇到错误(我不记得确切,但显示了错误,然后它询问我是否要创建一个新的 Debian 包,这再次导致错误)。 所以,我尝试单独安装 opencv,现在我尝试通过进入 opencv/build 并在那里构建 opencv_contrib 模块来安装包。显示here 好的,这样就更清楚了。您确实一起构建了 thgem,并且之前的安装似乎不会影响您。 【参考方案1】:
/home/akshat/opencv_contrib/modules/ximgproc/src/sparse_match_interpolators.cpp:171:52: error: ‘const class cv::_InputArray’ has no member named ‘isVector’

证明这是版本不兼容。 ximgproc 中的代码需要与 cv(特别是 cv::_InputArray)不同的接口,而不是您的股票提供的接口。

您的选择是:

尝试与您安装的cv 版本相对应的opencv-contrib 代码库版本 再次尝试构建与您当前的opencv-contrib 对应的较新的cv

【讨论】:

我昨晚才下载了这两个包。所以据我所知,它们都是最新的 “都是最新的”并不意味着“兼容(甚至可行)的版本”,尤其是当它是 git 头而不是发布快照时。请根据我上面的要求更新问题,以便我能够推断出这种情况。 是的,你是对的,我不使用 Github 所以不知道我实际上是在不同的分支中构建。 也谢谢你。你打败了我,从而节省了我们的时间和精力。 如果有人需要更精确的解决方案,我通过在两个文件夹中发出 git checkout 3.0.0 来解决它,即在 opencvopencv_contrib 中,然后重新编译

以上是关于opencv_contrib 编译错误:类没有成员的主要内容,如果未能解决你的问题,请参考以下文章

win10下Opencv3.4.7+Opencv_contrib编译安装

编译器似乎没有找到类 llvm::Instruction 的成员函数

Visual Studio 2015编译安装OpenCV 3.0和opencv_contrib

C++学习笔记OpenCV_contrib4.1.0,cmake编译提示缺少boostdesc_bgm.i

类成员的正确语法函数指针列表是啥?

可杀死线程类中的编译错误