在Windows下编译扩展OpenCV 3.1.0 + opencv_contrib 及一些问题
来源:互联网 发布:雨滴软件 编辑:程序博客网 时间:2024/05/17 23:06
1.下载OpenCV安装包:https://github.com/opencv/opencv
安装过程实际上就是解压过程,安装完成后得到(这里修改了文件名):
2.下载opencv_contrib源码:https://github.com/opencv/opencv_contrib
下载之后直接解压,得到源码目录:
3.下载cmake-gui工具:http://www.cmake.org/cmake/resources/software.html
选择不安装版的,根据自己的机型选择X86或者X64,下载完成后,直接解压即可使用,不必安装。
由于下载慢的原因,不能一步步截图,以下将采用下面用到相关链接第一个。在相关链接的基础上进行增加自己的一点见解,和遇到的问题,以及处理
二、使用cmake生成OpenCV.sln:
1.打开cmake-gui\bin目录下的cmake-gui.exe工具:
2.填写相应参数,包括:OpenCV源码目录和OpenCV.sln工程的导出目录,先Configure 导出OpenCV.sln工程:
第一次导出时需要设置后面用来编译此OpenCV.sln工程的VS的版本(这里特别要注意的是,自己机器上是否装有相应的VS版本,如果没有装,还是要编译就会出错,可能是找不到对应的工具原因,以及选择X86和X64),这里用的是VS 2013 win64。
过程中会下载一些依赖包,如果失败,手动下载放到对应位置下
设置完成之后点击“Generate”开始生成工程:
3.第一次编译完成之后,我们需要将额外的opencv_contrib加到工程中进行第二次编译,在配置表中找到“OPENCV_EXTRA_MODULES_PATH”,设置其参数值为open_contrib源码包中的modles目录,我的目录是“E:\OpenCV\tools\opencv_contrib-master\modules”:
设置完成之后点击Configure进行配置,不报错的话就进行第二次编译Generate:
第二次编译一般很快就能完成:
编译完成后,我们在资源管理器下查看上面设置的文件输出目录,发现目录下多出了很多文件,其实就是OpenCV.sln工程文件:
三、用VS打开OpenCV.sln工程,编译生成Debug和Release库:
1.用VS 2013打开OpenCV.sln工程,在解决方案中可以查看工程目录:
2.编译生成debug版本的库,记得在此之前要选择编译的平台信息,这就是编译生成debug版本和release版本的区别,也可以选择release,因为自己的工程可能要用到相应的动态链接库:
在解决方案中选中工程,右键选择重新生成解决方案:
3.找到CMakeTargets中的INSTALL,然后右键选择“仅限于项目”-->“仅生成INSTALL”:
然后,在工程目录下的install目录中,可以看到生成了一堆文件,这堆文件是不是和最上面的截图很相近:
最后:配置系统环境变量Path
D:\opencv3\opencv_contrib\install\x64\vc12\bin
四、把新的库文件配置到到项目中:
修改配置管理器,解决方案平台改为x64。打开VS的属性管理器,Debug|X64 下新建OpenCV3.1.props. 按照下面步骤配置环境,完事后另存在opencv3目录下,这样每次加载该配置即可。
VC++目录-->包含目录,添加:
D:\opencv3\opencv_contrib\install\includeD:\opencv3\opencv_contrib\install\include\opencvD:\opencv3\opencv_contrib\install\include\opencv2
VC++目录-->库目录,添加:
D:\opencv3\opencv_contrib\install\x64\vc12\lib
链接器-->输入-->附加依赖项,添加: (下面添加的release的版本,注意添加的库与编译选项要一致,需要注意debug比release的文件名多了个d)
opencv_aruco310d.lib
opencv_bgsegm310d.lib
opencv_bioinspired310d.lib
opencv_calib3d310d.lib
opencv_ccalib310d.lib
opencv_core310d.lib
opencv_datasets310d.lib
opencv_dnn310d.lib
opencv_dpm310d.lib
opencv_face310d.lib
opencv_features2d310d.lib
opencv_flann310d.lib
opencv_fuzzy310d.lib
opencv_hdf310d.lib
opencv_highgui310d.lib
opencv_imgcodecs310d.lib
opencv_imgproc310d.lib
opencv_line_descriptor310d.lib
opencv_ml310d.lib
opencv_objdetect310d.lib
opencv_optflow310d.lib
opencv_phase_unwrapping310d.lib
opencv_photo310d.lib
opencv_plot310d.lib
opencv_reg310d.lib
opencv_rgbd310d.lib
opencv_saliency310d.lib
opencv_shape310d.lib
opencv_stereo310d.lib
opencv_stitching310d.lib
opencv_structured_light310d.lib
opencv_superres310d.lib
opencv_surface_matching310d.lib
opencv_text310d.lib
opencv_tracking310d.lib
opencv_video310d.lib
opencv_videoio310d.lib
opencv_videostab310d.lib
opencv_xfeatures2d310d.lib
opencv_ximgproc310d.lib
opencv_xobjdetect310d.lib
opencv_xphoto310d.lib
opencv_aruco310.lib
opencv_bgsegm310.lib
opencv_bioinspired310.lib
opencv_calib3d310.lib
opencv_ccalib310.lib
opencv_core310.lib
opencv_datasets310.lib
opencv_dnn310.lib
opencv_dpm310.lib
opencv_face310.lib
opencv_features2d310.lib
opencv_flann310.lib
opencv_fuzzy310.lib
opencv_hdf310.lib
opencv_highgui310.lib
opencv_imgcodecs310.lib
opencv_imgproc310.lib
opencv_line_descriptor310.lib
opencv_ml310.lib
opencv_objdetect310.lib
opencv_optflow310.lib
opencv_phase_unwrapping310.lib
opencv_photo310.lib
opencv_plot310.lib
opencv_reg310.lib
opencv_rgbd310.lib
opencv_saliency310.lib
opencv_shape310.lib
opencv_stereo310.lib
opencv_stitching310.lib
opencv_structured_light310.lib
opencv_superres310.lib
opencv_surface_matching310.lib
opencv_text310.lib
opencv_tracking310.lib
opencv_video310.lib
opencv_videoio310.lib
opencv_videostab310.lib
opencv_xfeatures2d310.lib
opencv_ximgproc310.lib
opencv_xobjdetect310.lib
opencv_xphoto310.lib
4、关于imread的问题。如果图片名称是存在txt文档中,用readImageLists方法提取到list列表时,要特别注意txt文档的换行符必须是“UNIX 终束符 -LF"。否则读取到的文件名会多出"\r"字符,导致读取图像文件失败。
相关链接:http://blog.csdn.net/linshuhe1/article/details/51221015
相关链接:http://www.cnblogs.com/asmer-stone/p/5530868.html
相关链接:http://www.yidongtime.com/Html/dev/web/20160305/55517.html
五、一些问题
1. 所有测试代码里,默认搜索路径是
D:\opencv3\opencv_contrib\install\testdata
2. 程序出现Debug编译通过,但运行停止
C/C++ -> 代码生成 -> 运行库改成多线程调试DLL(/MDd)
3. 调试运行时出现 无法找到“XXX.exe”的调试信息,或者信息不匹配
连接器 -> 调试 -> 生成调试信息设置为是(DEBUG)
4. VS 监视变量窗口显示“未定义标识符”
C/C++ -> 优化 -> 优化设置为已禁用(/Od)
5. VS2013 c++ 修改默认活动解决方案平台
这时可以修改VS安装目录下:Microsoft Visual Studio 12.0\VC\VCWizards里面的三个文件:default.vcxproj、DefaultTest.vcxproj、vcupgradedefault.vcxproj用记事本打开,将Win32全部替换成x64即可,注意替换前做好备份。
6. OpenCV 中像素操作是按照 行(rows)、列(cols) 也就是 y, x 的顺序执行的。
7. CString 转 string
CString strMfc = dlg.GetPathName();std::string filename = CT2CA(strMfc.GetBuffer(0));
8. 输入参数分割
string path = "输入参数.txt";//Path_Imagesifstream fin;fin.open(path.c_str());std::string line;std::vector < std::string > strs;while (getline(fin, line)){ strs = split(line, " ");}
vector<string> split(const string &s, const string &delim){ vector<string> temp; //记录每次分割的起始位置 size_t last = 0; //记录匹配delim这个字符的下标 size_t index = s.find_first_of(delim, last); //当=-1时表示查找不到 while (index != -1) { temp.push_back(s.substr(last, index - last)); //记录下一次分割的起始位置 last = index + 1; index = s.find_first_of(delim, last); } //若最后一个分割符后面还有元素 if (s.length() - last>0) { temp.push_back(s.substr(last)); } return temp;}
9. 二维vector 排序
bool myfunctionX(Point2f i, Point2f j) { return (i.x<j.x); }bool myfunctionY(Point2f i, Point2f j) { return (i.y<j.y); }vector<Point2f> points;sort(points.begin(), points.end(), myfunctionX);vector<vector<Point2f>> points_;for (int i = 0; i < points_.size(); i++){ sort(points_[i].begin(), points_[i].end(), myfunctionY);//point 排序 }
10. 源码追踪
首先,我们写个简单的项目工程。主要用resize的函数。
Mat img= imread("d:\\lena.jpg");resize(img,img,Size(img.cols/2,img.rows/2));
然后,打开opencv工程文件,找到对应的imgwarp.cpp,resize函数在这个文件中。这里应该是在opencv_imgproc下的。
对opencv_imgproc,右击,选择属性,弹出如下对话框。在对应的配置属性->调试选项中,修改命令为我们刚刚写好的opencvBase工程目录下debug文件的exe文件。调试器类型修改为混合。表示调试该dll时,选择用我们选好的exe程序调用。
之后在opencv_imgproc项目上右击,将其设置为启动项目。
为了更好的观察是否进到了opencv代码里面,在imgwarp.cpp中,找到resize函数,设置断点。并且开始进行调试。
可以看到,这是已经进入到了resize函数当中。
- 在Windows下编译扩展OpenCV 3.1.0 + opencv_contrib 及一些问题
- 在Windows下编译扩展OpenCV 3.1.0 + opencv_contrib
- Windows下编译扩展OpenCV 3.1.0 + opencv_contrib
- Windows平台下编译OpenCV扩展的opencv_contrib
- OpenCV 3.1.0 + opencv_contrib编译(Windows)
- 【OpenCV】OpenCV 3.1.0 + opencv_contrib编译(Windows)
- OpenCV 3.2.0 + opencv_contrib编译(Windows)
- opencv3.3+opencv_contrib-3.3编译及在eclipse下使用opencv
- Windows中如何在Visual Studio 2015环境里编译OpenCV 3.1并加入opencv_contrib-master
- 使用CMake 2.8 编译OpenCV 3.1.0 + opencv_contrib扩展 (环境ubuntu14.04 CUDA8.0)
- OpenCV学习笔记(八)—— OpenCV 3.1.0 + opencv_contrib编译(Windows)
- Windows下编译opencv4android+opencv_contrib
- 在Linux下编译OpenCV_Contrib
- Win10+VS2015环境下编译 OpenCV 3.1和opencv_contrib
- Windows环境中编译opencv3.0同时加入OpenCV_contrib库及解决遇到相关问题
- Windows环境中编译opencv3.0同时加入OPENCV_contrib库及解决遇到相关问题
- win10 x64下编译 opencv 3.1.0 附加模块 opencv_contrib 环境配置
- Windows环境下使用CMake编译OpenCV3.0和OpenCV_contrib
- 求二叉搜索树(BST)的最小高度
- C语言数据类型
- RxAndroid之操作数据库SqlBrite(RXAndroid实现数据库的增、删、改、查)
- NIO直接缓冲区与非直接缓冲区
- fatal error C1083: 无法打开包括文件:“opencv2/core/core_c.h”: No such file
- 在Windows下编译扩展OpenCV 3.1.0 + opencv_contrib 及一些问题
- 文章标题 leetcode刷题日记——最长子串
- ibatis存储过程调用
- EasyUI入门4 datagrid数据加载的正确方式
- unity C#中,用BinaryWrite和BinaryReader来存取数据
- opencv_traincascade 训练自己的分类器
- ElasticSearch 5.0.0 安装部署常见错误或问题
- 【shell脚本】逐行处理文本文件
- iOS 模块详解—「Runloop 面试、工作」看我就