我尝试过几次,但大多数指南都只告诉你如何在构建OpenCV之后安装它。我以这种方式尝试了两次,但都没有成功,并且这种方法需要很多工作。
- 我希望能提供基本的安装说明(假设依赖项已经存在),其他人以后阅读时也会感激不尽。
- 最好使用git还是自己构建?
- 必须使用什么指令运行cmake?
- 是构建旧版本(例如2.4.9)更好,因为版本3目前不可靠吗?
我尝试过几次,但大多数指南都只告诉你如何在构建OpenCV之后安装它。我以这种方式尝试了两次,但都没有成功,并且这种方法需要很多工作。
这个问题在opencv论坛上有Berak的回答,如下所述。基本上,您可以从Git中拉取它,在cmake过程中添加它,然后就可以使用了。
Berak的答案:
此外,针对第四个问题的回答,OpenCV 3.0 是可靠的,我不会说它不可靠。in 3.0, SIFT and SURF were moved to the opencv_contrib repo
you will need to clone/fork/download that, and add that to your (main opencv) cmake;
cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules
then, after building,
#include "opencv2/xfeatures2d/nonfree.hpp" Ptr<xfeatures2d::SURF> surf = xfeatures2d::SURF::create(); // note extra namespace surf->detect(...); surf->compute(...);
don't forget to link to opencv_xfeatures2d(.lib)
终于找到了解决方案: 首先配置了"opencv-3.4"和所需的东西。我发现使用cmake-gui来配置opencv-3.4很容易。在配置期间,通过选择复选框启用了"OPENCV_ENABLE_NONFREE"和其他必需的内容。
编译进行得很顺利,make install也完成了。 但是我无法使用"nonfree" api,例如我的应用程序中使用的"xfeatures2d"。
经过6-7个小时的努力,最终发现我们需要在opencv的配置过程中包含"opencv-contrib"模块。
下载了opencv-contrib-3.4.8并在opencv配置中指定了路径"../opencv-contrib-3.4.8/modules",放在了OPENCV_EXTRA_MODULE_PATH中。
然后使用cmake-gui进行配置,现在可以看到以下来自"opencv_contrib"的配置,并且opencv已经选择了额外的模块。配置结束后执行make和make install。
xfeatures2d/boostdesc: Download: boostdesc_bgm.i
xfeatures2d/boostdesc: Download: boostdesc_bgm_bi.i
xfeatures2d/boostdesc: Download: boostdesc_bgm_hd.i
xfeatures2d/boostdesc: Download: boostdesc_binboost_064.i
xfeatures2d/boostdesc: Download: boostdesc_binboost_128.i
xfeatures2d/boostdesc: Download: boostdesc_binboost_256.i
xfeatures2d/boostdesc: Download: boostdesc_lbgm.i
xfeatures2d/vgg: Download: vgg_generated_48.i
xfeatures2d/vgg: Download: vgg_generated_64.i
xfeatures2d/vgg: Download: vgg_generated_80.i
xfeatures2d/vgg: Download: vgg_generated_120.i
data: Download: face_landmark_model.dat
..
>$ python
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import cv2
>>>
>>> surf=cv2.xfeatures2d.SURF_create()
>>> exit()