为了安装这个东西,忙了三天,安了n次,还把vs换了好几次,网上教程比较详细,这里主要说下踩的坑,希望能帮助大家。
这个博主写的比较详细,大家可以看看。
1.在加入opencv-contrib模块后,进行configure出现报错
(1) 报错信息如:
这是raw.githubusercontent.com无法访问,导致下载失败。
(2)怎么办
只能自行下载,这里推荐一个下载网站,
https://ghproxy.com这个网站可以代理下载github等网站的文件。
或者可以修改电脑hosts这个就不说了,自行百度,网上教程很多,但是我用着不太好使。
(3) 怎么下载,下载后放哪里
打开CmakedownloadLog.txt文件,这个可以用everything软件(强烈推荐)查找,在此只说下一小部分,如:
use_cache "D:/Program Files (x86)/Opencv/opencv/sources/.cache"
do_copy "opencv_ffmpeg.dll" "fa5a2a4e2f37defcb95bde8ed145c2b3" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/8041bd6f5ad37045c258904ba3030bb3442e3911/ffmpeg/opencv_ffmpeg.dll" "D:/Program Files (x86)/Opencv/opencv/opencv342build/3rdparty/ffmpeg"
这里就是从https://raw.githubusercontent.com/opencv/opencv_3rdparty/8041bd6f5ad37045c258904ba3030bb3442e3911/ffmpeg/opencv_ffmpeg.dll
下载opencv_ffmpeg.dll文件,把它放入D:/ProgramFiles(x86)/Opencv/opencv/opencv342build/3rdparty/ffmpeg"文件夹下
并把它拷到D:/ProgramFiles(x86)/Opencv/opencv/sources/.cache文件夹下,注意要把名字修改成MD值-文件名的形式,即fa5a2a4e2f37defcb95bde8ed145c2b3-opencv_ffmpeg.dll
其他缺失文件类似,特别要注意.i和.cmake文件下载后要把下载网页转换下成文件形式.
这里放下百度网盘里的ffmpeg,ippicv,boostdesc文件需要者自取
链接:https://pan.baidu.com/s/1Jig-QSsgKawfrQ4tUrEDwg
提取码:owgo
2.一般解决第一步中问题,就差不多成了,但是我在install后发现install里vc14文件夹中.lib文件只有两个即:
opencv_img_hash342d.lib
opencv_world342d.lib
我以为是cmake错误,就又重新搞了一遍,其实是在cmake中configure时选了BUILD_opencv_world所以把库都放在一块了。
3.代码实验
#include<opencv2\opencv.hpp>
#include<opencv2\xfeatures2d.hpp>
#include<opencv2\xfeatures2d\nonfree.hpp>
using namespace cv;
using namespace cv::xfeatures2d;
int main()
{
Mat srcImage1 = imread("car.jpg", 1);
Mat srcImage2 = imread("car1.jpg", 1);
imshow("图1", srcImage1);
imshow("图2", srcImage2);
int minHessian = 400;
Ptr<SURF>detector = SURF::create(minHessian);//定义检测类
std::vector<KeyPoint>keypoint1, keypoint2;
//检测特征点放入vector
detector->detect(srcImage1, keypoint1);
detector->detect(srcImage2, keypoint2);
//绘制特征点
Mat img_keypoint1, img_keypoint2;
drawKeypoints(srcImage1, keypoint1, img_keypoint1, Scalar::all(-1));
drawKeypoints(srcImage2, keypoint2, img_keypoint2, Scalar::all(-1));
imshow("检测图1", img_keypoint1);
imshow("检测图2", img_keypoint2);
waitKey(0);
return 0;
}
这是surf算法实现
自此安装完毕。