一般出现找不到.lib库文件都是环境变量配置没弄好或者是依赖项或包含库没设置好,下面是我的步骤,大家可以参考以下(大家一定要注意环境变量哪里的bin别弄成lib,2天不断重装的血泪教训)
1.CMake的下载
下载链接: https://cmake.org/download/.
CMake的下载,这里我觉得版本越新越好
这里需要勾选创建桌面图标,不创建的话可以自己去自己定义的安装目录找。
安装过程都是常规操作;这里就不讲解了。
2.opencv_contrib3.4.1下载安装
这里的opencv_contrib3.4.1一定要对应自己安装的opencv版本,我的是opencv3.4.1版本
下载链接: https://github.com/opencv/opencv_contrib/releases.
3.Cmake的编译
打开下载好的Cmake软件
在opencv3.4.1目录中新建tools文件夹(用于存放Cmake之后的拓展包)
分别指定opencv3.4.1的sources的文件夹目录和存放的tools目录
点击configue
点finish后需要等很长一段时间。
然后找到OPENCV_EXTRA_MODULES_RATH一项,添加你刚刚解压的contrib3.4.1中的modules目录,
最后选择generate开始编译。
完成之后如果在你自定义的输出文件夹中找到“OpenCV.sln”文件,即表明编译成功。
点击open project;
如图所示点击“生成—>生成解决方案(F6)”,需要等很长一段时间。
点击INSTALL安装库文件
解决方案资源管理器—>CMakeTargets—>INSTALL—>仅用于项目—>仅生成INSTALL”
最后我们找到多出来的install文件夹
进到里面去可以找到我们用的库(在x64->VC15->lib)这里的VC15对应的意思是VS2017。
3.配置环境变量
电脑->属性->高级系统设置
之后把install的lib文件添加进去
4.新建一个测试代码
#include <opencv2/opencv.hpp>
#include <opencv2/xfeatures2d.hpp>
#include
using namespace cv;
using namespace cv::xfeatures2d;
using namespace std;
int main(int argc, char** argv) {
Mat src = imread(“D:/image2/43.jpg”, IMREAD_GRAYSCALE);
if (src.empty()) {
printf(“could not load image…\n”);
return -1;
}
namedWindow(“input image”, CV_WINDOW_AUTOSIZE);
imshow(“input image”, src);
// SURF特征检测
int minHessian = 100;
Ptr<SURF> detector = SURF::create(minHessian);
vector<KeyPoint> keypoints;
detector->detect(src, keypoints, Mat());
// 绘制关键点
Mat keypoint_img;
drawKeypoints(src, keypoints, keypoint_img, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
imshow("KeyPoints Image", keypoint_img);
waitKey(0);
return 0;
}
包含目录、库目录
视图——其他窗口——属性管理器
这里就多出了个窗口。
Debug|x64—— 右键——属性
在包含目录跟库目录这里面分别添加路径(注意是添加install里面的)
这里如果代码不成功,可以去修改环境变量、包含目录、库目录、以及依赖项。修改环境变量记得重启电脑,否则不起作用。
附加依赖项(如果这里复制不了,可以去这个地址)
opencv_aruco341d.lib
opencv_bgsegm341d.lib
opencv_bioinspired341d.lib
opencv_calib3d341d.lib
opencv_ccalib341d.lib
opencv_core341d.lib
opencv_datasets341d.lib
opencv_dnn341d.lib
opencv_dnn_objdetect341d.lib
opencv_dpm341d.lib
opencv_face341d.lib
opencv_features2d341d.lib
opencv_flann341d.lib
opencv_fuzzy341d.lib
opencv_hfs341d.lib
opencv_highgui341d.lib
opencv_imgcodecs341d.lib
opencv_imgproc341d.lib
opencv_img_hash341d.lib
opencv_line_descriptor341d.lib
opencv_ml341d.lib
opencv_objdetect341d.lib
opencv_optflow341d.lib
opencv_phase_unwrapping341d.lib
opencv_photo341d.lib
opencv_plot341d.lib
opencv_reg341d.lib
opencv_rgbd341d.lib
opencv_saliency341d.lib
opencv_shape341d.lib
opencv_stereo341d.lib
opencv_stitching341d.lib
opencv_structured_light341d.lib
opencv_superres341d.lib
opencv_surface_matching341d.lib
opencv_text341d.lib
opencv_tracking341d.lib
opencv_video341d.lib
opencv_videoio341d.lib
opencv_videostab341d.lib
opencv_xfeatures2d341d.lib
opencv_ximgproc341d.lib
opencv_xobjdetect341d.lib
opencv_xphoto341d.lib
代码演示
#include <opencv2/opencv.hpp>
#include <opencv2/xfeatures2d.hpp>
#include <iostream>
using namespace cv;
using namespace cv::xfeatures2d;
using namespace std;
int main(int argc, char** argv) {
Mat src = imread("D:/image2/43.jpg", IMREAD_GRAYSCALE);
if (src.empty()) {
printf("could not load image...\n");
return -1;
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src);
// SURF特征检测
int minHessian = 100;
Ptr<SURF> detector = SURF::create(minHessian);
vector<KeyPoint> keypoints;
detector->detect(src, keypoints, Mat());
// 绘制关键点
Mat keypoint_img;
drawKeypoints(src, keypoints, keypoint_img, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
imshow("KeyPoints Image", keypoint_img);
waitKey(0);
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)