Opencv3.4.1+contrib3.4.1+vs2017配置(主要解决了编译的时候找不到.lib文件的问题)

    xiaoxiao2023-10-30  141

    一般出现找不到.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; }

    最新回复(0)