Ubuntu下在openCV3.2中配置opencv_contrib,然后使用SURF算子

最近用openCV3.2,发现无法使用SURF做特征点的检测。百度了一下,发现了是这样解释的。
“图像识别中的特征点检测中,需要用到Surf和Sift算法,但是这两个算法在OpenCV 3.2的Release版本中并不存在,因为他们是存放在opencv_contrib目录下面的未稳定功能模块”。
安装好openCV_contrib用了我一下午时间,才让代码在openCVC3.2的环境下编译通过,这里分享下我的方法。

我配置的前提是我的电脑已经配置好了oepnCV3.2,这个时候就要下一个和openCV3.2相匹配的openCV_contribe文件。也就是pencv_contrib的版本一定要与opencv的版本一致,这是顺利安装的前提,一定注意。
下载地址:我没保存,后面补上
下面说说我的安装流程:

1.第一步:
打开openCV3.2的build目录。
比如根据我的openCV安装目录是这样的

cd /home/dx/opencv3.2/opencv-3.2.0/build

第二步:cmake,一般Ubuntu都会安装,如果想确定自己安装没有,直接在控制台输入:cmake,就会显示Cmake的所有信息。
下面看看命令

$ cmake -DOPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib/modules/ ~/opencv/

注意上面有两个~,每一个后面跟了一个路径,第一个是opecnv_contrib下的modules,第二个是opencv的源目录。
比如根据我的系统里面的安装路径:
就是这样的

$ cmake -DOPENCV_EXTRA_MODULES_PATH=/home/dx/Downloads/opencv_contrib-3.2.0/modules /home/dx/opencv3.2/opencv-3.2.0

这里我没有用~,~ 即用户家目录 /home/username,我的家目录就是/home/dx。

再次强调contrib和openCV版本好应该一致,否则这里报错。

第三步:

make -j8 

具体我也不知道具体意思

第四步:

sudo make install

经过这几部,我的contrib就配置好了。
参考链接:http://blog.csdn.net/lemianli/article/details/73614453
http://blog.csdn.net/CupidYzw97/article/details/74857467

下面在说说怎么使用SURF,这个和openCV2.X中有不同:
使用格式为:

Ptr<SURF> detector = SURF::create(minHessian);
detector->detect(img_1, keypoints_1);


Ptr<SURF> extractor = SURF::create();
extractor->compute(img_1, keypoints_1, descriptors_1);


Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("BruteForce");
matcher->match(descriptors_1, descriptors_2, matches);

可能这样后,编译还是会报SURF的一些错误,
我看了这篇博客后:http://blog.csdn.net/qq_22033759/article/details/48413657

在代码里加了

using namespace cv:xfeatures2d;

就可以顺利编译了。

好了,继续调后面的代码了,国庆节第二天一下午就用来折腾这个了,宝宝心里苦啊。

果然还有问题,编译通过了,运行找不到lib,错误如下

Ubuntu下在openCV3.2中配置opencv_contrib,然后使用SURF算子_第1张图片

也就是找不到error while loading shared libraries: libopencv_xfeatures2d.so.3.2。
主要是要重新配置openCV环境变量的问题。

然后下面说说怎么解决,直接参考这篇博客,很详细。
http://blog.csdn.net/cv_you/article/details/77341631

你可能感兴趣的:(图像处理,openCV,linux)