最近在做基于opencv相关东西时,需要用到contrib扩展库,配置完记录下。 先写一下版本信息:opencv4.0.0rc,vs2017和 win10。
目录
1. 准备工具
主要用到: CMake,contrib和vs
1.1 CMake下载安装
下载地址: https://cmake.org/download/
下载的是红框中的,解压之后即可使用(点击cmake-gui.exe即可)。
1.2 opencv_contrib下载安装
下载地址: https://github.com/opencv/opencv_contrib/releases
选择你的opencv对应的版本。下载完成之后直接解压即可。
opencv_contrib-4.0.0-rc.zip解压完如下图:
2. CMake 编译
-
打开CMake,上面红框第一行输入Opencv(我的是opencv4.0)的sources目录(注意:不是opencv_contrib的目录,原来自己opencv的目录);第二行输入你自定义的输出目录。最后点左下角红框的Configure
-
然后选择对应vs的版本,64位系统选择Win64(我的是x64),默认的是Win32。
选择完就是这样如下图:
然后就是等待了。之后显示Configuring done第一次源码配置就完成了(完成后列表不出现红色)。
要是如上述红色,需要再次单击 Configure知道如下图所示,则完成。 -
完成上述后找到OPENCV_EXTRA_MODULES_RATH一项,添加你刚刚解压的opencv_contrib中的modules目录,最后点击Generate开始编译。
完成后左下角显示Configuring done,Generating done。
完成之后如果在你的输出文件夹中找到OpenCV.sln文件,即表明编译成功完成。
3. VS2017 编译
- 使用VS2017打开刚刚的“OpenCV.sln”文件
- 然后如图所示点击“生成—>重新生成解决方案”,这得等一段时间
完成后(我的有1个失败,8个跳过,目前没有出现问题,还没研究为什么不能全部生成成功的原因**)
- “解决方案资源管理器—>CMakeTargets—>INSTALL—>仅用于项目—>仅生成INSTALL(B)”然后又是等好一会儿
完成后
- 最后到自定义的文件夹确认一下,找到install文件夹,进去查看里面的内容(如下图,注:对于后边配置环境,install文件夹作用就像配置opencv4.0时的build文件夹一样):
4. 环境配置
1. 环境变量配置
- 右键电脑【属性】
- 【高级系统设置】
- 【环境变量】
- 【系统变量】【Path】
编译目录“ *\install\x64\vc15\bin” 的完整路径 (如下图)
2. vs2017配置
1.新建项目,属性管理器 -> 配置属性 ->VC++目录
其中包含目录、库目录配置方法如同opencv4.0配置,此处只贴图,过程参考下述链接(把install文件夹看做配置opencv4.0时的build文件夹一),附opencv4.0配置过程:https://blog.csdn.net/weixin_41991128/article/details/83656543
2.属性管理器 -> 配置属性 ->链接器****附加依耐项配置
注意:附加依赖项有变化:opencv_contrib的依赖项如下(我的opencv4.0.0rc的contrib),不同于opencv4.0只配置两项(opencv_world400d.lib,opencv_world400.lib):
opencv_aruco400d.lib
opencv_bgsegm400d.lib
opencv_bioinspired400d.lib
opencv_calib3d400d.lib
opencv_ccalib400d.lib
opencv_core400d.lib
opencv_datasets400d.lib
opencv_dnn400d.lib
opencv_dnn_objdetect400d.lib
opencv_dpm400d.lib
opencv_face400d.lib
opencv_features2d400d.lib
opencv_flann400d.lib
opencv_fuzzy400d.lib
opencv_gapi400d.lib
opencv_hfs400d.lib
opencv_highgui400d.lib
opencv_imgcodecs400d.lib
opencv_imgproc400d.lib
opencv_img_hash400d.lib
opencv_line_descriptor400d.lib
opencv_ml400d.lib
opencv_objdetect400d.lib
opencv_optflow400d.lib
opencv_phase_unwrapping400d.lib
opencv_photo400d.lib
opencv_plot400d.lib
opencv_reg400d.lib
opencv_rgbd400d.lib
opencv_saliency400d.lib
opencv_shape400d.lib
opencv_stereo400d.lib
opencv_stitching400d.lib
opencv_structured_light400d.lib
opencv_superres400d.lib
opencv_surface_matching400d.lib
opencv_text400d.lib
opencv_tracking400d.lib
opencv_video400d.lib
opencv_videoio400d.lib
opencv_videostab400d.lib
opencv_viz400d.lib
opencv_xfeatures2d400d.lib
opencv_ximgproc400d.lib
opencv_xobjdetect400d.lib
opencv_xphoto400d.lib
其中:400表示4.0.0版本
另附:获取上述依赖项
- 打开命令行窗口
- 输入下述两行命令,可以在lib文件夹得到0.txt文件
D:\SoftwareInstall_all\opencv4.0\contrib_4.0.0rc_cmake\sources_contrib\install\x64\vc15\lib`
dir /b *.lib *>0.txt
0.txt文件:
5. 程序验证
验证代码如下,这个一个简化的直线提取的官方例程,使用了contrib扩展里的#include "opencv2/ximgproc.hpp"头文件。
#include <iostream>
#include "opencv2/imgproc.hpp"
#include "opencv2/ximgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
using namespace std;
using namespace cv;
using namespace cv::ximgproc;
int main(int argc, char** argv)
{
//在工程目录下放一张名字为"01.jpg"的图片
Mat image = imread("01.jpg", IMREAD_GRAYSCALE);
imshow("Input", image);
if (image.empty())
{
return -1;
}
Ptr<LineSegmentDetector> lsd = createLineSegmentDetector();
vector<Vec4f> lines_lsd;
int length_threshold = 10;
float distance_threshold = 1.41421356f;
double canny_th1 = 50.0;
double canny_th2 = 50.0;
int canny_aperture_size = 3;
bool do_merge = false;
Ptr<FastLineDetector> fld = createFastLineDetector(length_threshold,
distance_threshold, canny_th1, canny_th2, canny_aperture_size,
do_merge);
vector<Vec4f> lines_fld;
for (int run_count = 0; run_count < 10; run_count++)
{
lines_lsd.clear();
int64 start_lsd = getTickCount();
lsd->detect(image, lines_lsd);
// Detect the lines with LSD
double freq = getTickFrequency();
double duration_ms_lsd = double(getTickCount() - start_lsd) * 1000 / freq;
}
// Show found lines with LSD
Mat line_image_lsd(image);
lsd->drawSegments(line_image_lsd, lines_lsd);
imshow("LSD result", line_image_lsd);
waitKey(0);
return 0;
}
效果如下:
到此contrib扩展库已全部配置完。
6 参考
主要参考
[1]: https://blog.csdn.net/weixin_41991128/article/details/84593477
[2]: https://blog.csdn.net/weixin_41991128/article/details/83656543#1_47
[3]: https://blog.csdn.net/weixin_41695564/article/details/79925379