编译opencv2.4.13,编译opencv3,在opencv3以上环境中使用nonfree等模块,使用surf等,3.4.3为例

 

==============================================================================================

==============================================================================================

opencv3

 

 

 

 

 

 

https://opencv.org/releases/page/3/原版压缩包,分zip和windows的exe。

https://github.com/opencv/opencv/releases/tag/3.4.3  也是一个下载途径

https://github.com/opencv/opencv_contrib/releases/tag/3.4.3  contrib,也分版本的,要对应吧

(contrib的一个总目录https://github.com/opencv/opencv_contrib/releases)

 

linux的安装方法(参考的是别人的3.2.2的过程)

1. sudo apt-get install build-essential

2. sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

3. sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev  

cmake(下过了,连接不找了,何况他这是linux的cmake)

build建在源文件路径下

有专门的参数指定额外的库

CMAKE_INSTALL_PREFIX安装路径

OPENCV_EXTRA_MODULES_PATH模块路径

在终端执行以下两步:

第一步:
cd opencv-3.2.0/build

第二步:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv320 -D OPENCV_EXTRA_MODULES_PATH=/home/jason/opencv_contrib-3.2.0/modules/ ..

如果不安装opencv_contrib模块,则第二步的命令为:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv320

cmake过程中可能遇到的问题:

如果网络不好,出现ippicv_linux_20151201.tgz无法在终端下载的情况,则可以先单独下载ippicv_linux_20151201.tgz之后,把其移动到终端所提示的路径(终端会提示该路径找不到文件),如路径/opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/

移动的时候,可以另外打开一个终端操作:
sudo mv ippicv_linux_20151201.tgz /opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e

如果同样有其他类似的文件无法下载,方法同上。
 

在终端执行以下两步:

第1步:
sudo make

第2步:
sudo make install

linux下这样算安装完成

 

windows版本的cmake过程

 

1.用cmake-gui,选中opencv的根目录,选中build目录。

2.点configure,3.4.3+vs2015+default(失败,别人有个3.0.0-vs2013的,opencv本身是vs不相关的吧??或者说默认的编译选项太多了?但是我不知道怎么选啊)

核心问题是编不过去,是找到别人的参考,还是自己根据错误把配置选项全删了?

关掉WITH_CUDA,居然成功了,看来就是CUDA问题。generate也成功了

编译opencv2.4.13,编译opencv3,在opencv3以上环境中使用nonfree等模块,使用surf等,3.4.3为例_第1张图片

 

这个表里不止有选项打钩,还有变量,在其中找到Name为OPENCVEXTRAMODULESPATH的参数,然后把它的Value设置为opencvcontrib的路径

编译opencv2.4.13,编译opencv3,在opencv3以上环境中使用nonfree等模块,使用surf等,3.4.3为例_第2张图片

要精细到modules路径

 

3.generate生成,生成

 

最后,会得到一个OpenCV.sln?

用VS

打开D:/VS2015/opencv-3.4.0/build/目录下的OpenCV.sln

编译opencv2.4.13,编译opencv3,在opencv3以上环境中使用nonfree等模块,使用surf等,3.4.3为例_第3张图片

 

编译debug版本库:在“解决方案'OpenCV'(3.0.0有141个项目?3.4.3我只有30个项目?)”上面点击右键-->重新生成解决方案

编译opencv2.4.13,编译opencv3,在opencv3以上环境中使用nonfree等模块,使用surf等,3.4.3为例_第4张图片

实测报错

http://tieba.baidu.com/p/5682396502

我的3.4.2怎么报4.0的错误?

 

错了,第二次是139个项目,之前可能是路径设定再source下的build,可能和其他配置有冲突,互相改写了?现改名mybuild,好像也不是,选项里那些build,都是根据输出路径自动生成的,修改之后一样的错误

编译opencv2.4.13,编译opencv3,在opencv3以上环境中使用nonfree等模块,使用surf等,3.4.3为例_第5张图片

编译opencv2.4.13,编译opencv3,在opencv3以上环境中使用nonfree等模块,使用surf等,3.4.3为例_第6张图片

重回cmake,再勾上nonfree,再来一遍,确实是141个项目

编译opencv2.4.13,编译opencv3,在opencv3以上环境中使用nonfree等模块,使用surf等,3.4.3为例_第7张图片

 

项目设置是否对?debug,win32?这个主要是输出install目录吧,最终还是被引用,所以这里不用纠结。

改成x64(我机器没有x86选项)?????

编译opencv2.4.13,编译opencv3,在opencv3以上环境中使用nonfree等模块,使用surf等,3.4.3为例_第8张图片

 

 

 

3.找到CMakeTargets中的INSTALL,然后右键选择“仅限于项目”-->“仅生成INSTALL”,然后就在D:\opencv3\opencv\mybuild\install中发现了许多东东。

什么时候设置?生成之后?

然后是自己项目的引用(这里的vc12限于VS2013,VS2015应该是vc14

  1. VC++目录-->包含目录,添加:
    D:\opencv3\opencv\mybuild\install\include

  2. VC++目录-->库目录,添加:
    D:\opencv3\opencv\mybuild\install\x86\vc12\lib
    D:\opencv3\opencv\mybuild\install\x86\vc12\staticlib

  3. 链接器-->输入-->附加依赖项,添加opencv_xxxxxd.lib(这个见仁见智,不同版本名称不同,总之就是openc库目录的所有)

路径方面,或者,比如:

D:\VS2015\opencv-3.4.0\mybuild\install\include

D:\VS2015\opencv-3.4.0\mybuild\install\x86\vc14\lib

vc14没有那个staticlib

 

 

额外的:

surf什么的属于收费模块,应该勾选如下选项?这是否与前边的错误有关?(按理说这是编译之后使用才可能出现的错误,目前卡在了编译)但是勾选之后这一步都过不去了,不勾选,好歹是能出sln,顶多是sln编译不过,

编译opencv2.4.13,编译opencv3,在opencv3以上环境中使用nonfree等模块,使用surf等,3.4.3为例_第9张图片

 

 

 

==========================================================================================================================================================================================================================================================================================

 

 

opencv2

 

同样是在windows用cmake,首先,CUDA肯定是报错了要关掉(所有流程参考下边opencv3的操作,除了opencv2不需要额外附加nonfree,过程一样)。

另外,我opencv2遇到了这个错

CMake Warning at cmake/OpenCVPackaging.cmake:23 (message): CPACK_PACKAGE_VER

 

这是把cmake中的打印信息复制出来找到的,你的版本号,或者你下载记得。

编译opencv2.4.13,编译opencv3,在opencv3以上环境中使用nonfree等模块,使用surf等,3.4.3为例_第10张图片

 

 

找到makelist

这个Makelists.txt文件海量多,需要改的是opencv\sources\目录的那个

在文件下搜索

if(GIT_EXECUTABLE)

找到这一段,图中注释部分是改掉的,原来是unknown,所以不匹配。

不同的是,有人是2.4.13整,我是2.4.13.6,而你也可能是7是8,而且,我也有git(但是可能出现了某种问题吧,比如我的目录下可能没git信息,是自己解压缩的包),所以只改第二个"unknown"(他是没git,触发了else)不行,要把第一个改了,两个unknown,都改成自己的版本,

编译opencv2.4.13,编译opencv3,在opencv3以上环境中使用nonfree等模块,使用surf等,3.4.3为例_第11张图片

 

 

===========================================================================

再说下流程,cmake配置和生成sln,sln内部去编译生成库,新建vs工程引用生成的库,运行。

最后运行报错应用程序无法正常启动0xc000007b

 

x86需要改成x64,尽管在opencv的工程的编译选项是win32,貌似认为是编译的64(也许是我下的版本)。

改完之后运行成功

 

==============================================================================================

 

最后,既然还是引用?既然还是VS设定include和lib路径,添加依赖dll,那么现在编译一次,和直接解压一份opencv直接引用,区别是什么呢?我猜,就是能定制了,尤其是Opencv3,有些非免费的库不存在,需要自己编译进来,如果没有这个需求,比如opencv2,貌似就没有编译的必要了。。。

 

你可能感兴趣的:(编译opencv2.4.13,编译opencv3,在opencv3以上环境中使用nonfree等模块,使用surf等,3.4.3为例)