一、准备工作:

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工具:

ps:给出ffmpeg和ippicv库的下载地址为https://github.com/opencv/opencv_3rdparty/branches/all

解决下载ffmpeg卡住的问题: ffmpeg_version.cmake、opencv_ffmpeg.dll、opencv_ffmpeg_64.dll 三项复制到 “3rdparty\ffmpeg” 目录下

解决下载ippicv卡住的问题:将“..\opencv_3rdparty-ippicv-master_20151201\ippicv” 中将ippicv_windows_20151201.zip 解压到当前目录。

在 “path to your OpenCV \opencv\sources\3rdparty\ippicv” 中创建文件夹unpack,将解压得到的ippicv_win 复制到新创建的unpack 中。

编辑 downloader.cmake,将downloader.cmake 里修改版本名

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:(ps:勾选BUILD_opencv_world!!!这个会让动态库的lib减少到只需要world以及ts两个,非常方便)

第二次编译一般很快就能完成:

编译完成后,我们在资源管理器下查看上面设置的文件输出目录,发现目录下多出了很多文件,其实就是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目录下,这样每次加载该配置即可。

  1. VC++目录-->包含目录,添加:

    D:\opencv3\opencv_contrib\install\include
    D:\opencv3\opencv_contrib\install\include\opencv
    D:\opencv3\opencv_contrib\install\include\opencv2
  2. VC++目录-->库目录,添加:

    D:\opencv3\opencv_contrib\install\x64\vc12\lib
  3. 链接器-->输入-->附加依赖项,添加: (下面添加的release的版本,注意添加的库与编译选项要一致,需要注意debug比release的文件名多了个d)

debug release

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());

8. 输入参数分割

string path = "输入参数.txt";//Path_Images
ifstream 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 = ;
//记录匹配delim这个字符的下标
size_t index = s.find_first_of(delim, last);
//当=-1时表示查找不到
while (index != -)
{
temp.push_back(s.substr(last, index - last));
//记录下一次分割的起始位置
last = index + ;
index = s.find_first_of(delim, last);
}
//若最后一个分割符后面还有元素
if (s.length() - last>)
{
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 = ; 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 及一些问题的更多相关文章

  1. 继《在Windows下编译扩展OpenCV 3.1.0 + opencv_contrib》修订

    在之前的<在Windows下编译扩展OpenCV 3.1.0 + opencv_contrib>中有些问题,后来由于时间不是很充足,故现在对其中的问题进行完善,如下所示对红色框框中的相应的 ...

  2. (一)在Windows下编译扩展OpenCV 3.1.0 + opencv_contrib 及一些问题

    一.准备工作: 1.下载OpenCV安装包:https://github.com/opencv/opencv 安装过程实际上就是解压过程,安装完成后得到(这里修改了文件名): 2.下载opencv_c ...

  3. 在Windows下编译扩展OpenCV 3.1.0 + opencv_contrib

    为什么要CMake,这里我陈述自己的想法,作为一个刚使用opencv库的小白来说,有以下大概三点内容 1.由于在学习图像处理滤波器中,需要用到各种边缘保护滤波器(EPS)算法,但是这些算法在OpenC ...

  4. windows下编译php7图形库php_ui.dll

    CSDN博客 具有图形化编程才有意思,这几天看到了php ui 图形扩展,只是现在只能下载php 7.1的 本次教程编译php7.2.6的 php ui 要是linux下编译起来比较简单 但是 win ...

  5. [转] Windows下编译OpenSSL

    简述 OpenSSL是一个开源的第三方库,它实现了SSL(Secure SocketLayer)和TLS(Transport Layer Security)协议,被广泛企业应用所采用.对于一般的开发人 ...

  6. Windows下编译objective-C

    Windows下编译objective-C 2011-08-31 14:32 630人阅读 评论(0) 收藏 举报 windowscocoa工具objective clibraryxcode   目录 ...

  7. 在Windows下编译FFmpeg详细说明

    MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时 MinGW,即 Minimalist GNU F ...

  8. 如何在WINDOWS下编译BOOST C++库 .

    如何在WINDOWS下编译BOOST C++库 cheungmine 2008-6-25   写出来,怕自己以后忘记了,也为初学者参考.使用VC8.0和boost1.35.0.   1)下载boost ...

  9. 在Windows下编译OpenSSL(VS2005和VC6)

    需要说明的是请一定安装openssl-0.9.8a .  openssl-1.0.0我没有编译成功. 如何在Windows下编译OpenSSL (Vs2005使用Vc8的cl编译器)1.安装Activ ...

随机推荐

  1. B2B、B2C、C2C、O2O分别是什么意思?

    1.B2B 是指进行电子商务交易的供需双方都是商家(或企业.公司),她(他)们使用了互联网的技术或各种商务网络平台,完成商务交易的过程.电子商务是现代 B2B marketing的一种具体主要的表现形 ...

  2. Jmeter之TCP取样器(模拟数据上报压测)

    TCP压测 场景:模拟硬件设备上报数据(登录,心跳,GPS定位数据/光感数据/电量数据),对这个功能进行压测 啰嗦一句:TCP压测很简单,只要调通了一个TCP,后续的逻辑判断就用逻辑控制器和正则处理就 ...

  3. Online Meeting CodeForces - 420B (思维)

    大意: 给定某一段连续的上线下线记录, 老板上线或下线时房间无人, 并且每次会议都在场, 求哪些人可能是老板. 结论1: 从未出现过的人一定可以是老板. 结论2: 出现过的人中老板最多只有1个. 结论 ...

  4. JavaScript设计模式(策略模式)

    策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换.将不变的部分和变化的部分隔开是每个设计模式的主题,策略模式也不例外,策略模式的目的就是将算法的使用与算法的实现分离开来 ...

  5. python爬取妹子图全站全部图片-可自行添加-线程-进程爬取,图片去重

    from bs4 import BeautifulSoupimport sys,os,requests,pymongo,timefrom lxml import etreedef get_fenlei ...

  6. 巧用Map缓存提升"翻译"速度

    在业务编码中,很多情况都需要用到code2Name或者id2Name之间的"翻译",在我的过往经历中发现不少开发人员都是直接双重循环实现这种"翻译".如果一次& ...

  7. 5.Linux 软件安装管理

    1.RPM包安装 (RPM会有依赖性,即安装这个包之前,需要安装某个包) 查询已安装的rpm 列表   rpm  -qa | grep  xx 安装rpm包 rpm  -ivh  rpm  包名 -i ...

  8. python将list元素转为数字

    mask_x = ['11', '12', 13'] 方法1:for循环遍历 mask_x = [int(x) for x in mask_x] 方法2:map迭代 mask_x = list(map ...

  9. C语言的宏macro的使用

    C's Macro Introduction 1.The Connect Macros: ## 这是一个预处理连接符,这个操作符主要用来将两个符号连接成为一个完整的宏符号.通过下面的代码,可以看到其具 ...

  10. python函数:函数参数、对象、嵌套、闭包与名称空间、作用域

    今天的内容整理共有5部分 一.命名关键字参数 二.函数对象 三.函数的嵌套 四.名称空间与作用域 五.闭包函数 一.命名关键字参数 # 命名关键字参数: 在定义函数时,*与**之间参数称之为命名关键字 ...