VS2015编译OpenCV320的32位和64位动态库和静态库

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/nullnull2011/article/details/75000071

OpenCV官网下载的opencv320版本,只给出了其vc14的x64的debug和release版本,并且没有pdb调试符号,本文将从下面几个部分介绍如何利用cmake建立工程,并用vs2015进行编译。

一.编译准备

  1. 下载安装VS2015:我的网盘中存有vs2015社区版本,保证可用,下载链接http://pan.baidu.com/s/1dF9vZnr
  2. 下载安装cmake:opencv320中cmakelists.txt要求cmake的最低版本为2.8.8,官网下载链接为https://cmake.org/download/,建议下载gui版本,即.msi扩展名的安装包,这是我存储在百度网盘上的cmake http://pan.baidu.com/s/1jHXXZF4
  3. 下载opencv源码:官网下载链接http://opencv.org/releases.html,我的网盘存储地址为http://pan.baidu.com/s/1sl2lSnF。双击安装得到opencv320的两个文件夹build和 sources,build文件夹中存放的是官网给出的opencv320的x64的debug和release库,但是没有pdb调试符;sources文件夹中存放的就是其源码,其中包含了camke脚本、依赖的第三方库等。
  4. 下载opencv依赖的第三方库:在opencv320源码sources文件夹下的3rdparty中存放的就是opencv320所依赖的第三方库,如下图,如果一个个文件夹点进去可以发现,ffmpeg和ippicv文件夹下没有相关c的源码,那是因为opencv官网要求在cmake中configure工程时临时下载,如果不提前下载好,后面用cmake下载的时候可能会卡住,导致configure工程失败,后面会提到相应解决方法。
    3rdparty文件夹图片
    给出ffmpeg和ippicv库的下载地址为https://github.com/opencv/opencv_3rdparty/branches/all,opencv320要求的ffmpeg和ippicv的版本如下图所示。考虑到有些同学可能访问github慢,我将其上传到了百度网盘,大家可以按需下载http://pan.baidu.com/s/1c1LZfGW
    ffmpeg和ippicv库

二.用cmake生成OpenCV解决方案

  • 1.打开cmake程序,where is the source code中填写源码中sources文件夹的路径,where to build the binaries中填写cmake的生成结果。
    cmake图片
  • 2.点击configure按钮,如下图,Visual Studio 14 2015 Win64就是生成64位的解决方案,Visual Studio 14 2015就是生成64位的解决方案,按需要配置,点击finish。
    configure图片
  • 3.稍等片刻后,有的人可能会卡在如下图所示的下载ffmpeg的地方,这时候之前下载的ffmpeg和ippicv的库就起作用了。
    卡住界面

  • 4.解决下载ffmpeg卡住的问题:将“../opencv_3rdparty-ffmpeg-master_20161212\ffmpeg” 目录中的 ffmpeg_version.cmake、opencv_ffmpeg.dll、opencv_ffmpeg_64.dll 三项复制到 “path to your opencv\opencv\sources\3rdparty\ffmpeg” 目录下。
    这里写图片描述
    将上图中的目录复制到下图中。
    这里写图片描述
    在 “path to your OpenCV\opencv\sources\3rdparty\ffmpeg” 中打开文件 ffmpeg.cmake ,将其内容修改为:

message(STATUS "FFMPEG: Package successfully downloaded")
include(${CMAKE_CURRENT_LIST_DIR}/ffmpeg_version.cmake)
  • 5.解决下载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 的内容修改为:
#
# The script downloads ICV package
#
# On return this will define:
# OPENCV_ICV_PATH - path to unpacked downloaded package
#

function(_icv_downloader)
  # Commit SHA in the opencv_3rdparty repo
  set(IPPICV_BINARIES_COMMIT "81a676001ca8075ada498583e4166079e5744668")
  # Define actual ICV versions
  if(APPLE)
    set(OPENCV_ICV_PACKAGE_NAME "ippicv_macosx_20151201.tgz")
    set(OPENCV_ICV_PACKAGE_HASH "4ff1fde9a7cfdfe7250bfcd8334e0f2f")
    set(OPENCV_ICV_PLATFORM "macosx")
    set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_osx")
  elseif(UNIX)
    if(ANDROID AND NOT (ANDROID_ABI STREQUAL x86 OR ANDROID_ABI STREQUAL x86_64))
      return()
    endif()
    set(OPENCV_ICV_PACKAGE_NAME "ippicv_linux_20151201.tgz")
    set(OPENCV_ICV_PACKAGE_HASH "808b791a6eac9ed78d32a7666804320e")
    set(OPENCV_ICV_PLATFORM "linux")
    set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_lnx")
  elseif(WIN32 AND NOT ARM)
    set(OPENCV_ICV_PACKAGE_NAME "ippicv_windows_20151201.zip")
    set(OPENCV_ICV_PACKAGE_HASH "04e81ce5d0e329c3fbc606ae32cad44d")
    set(OPENCV_ICV_PLATFORM "windows")
    set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_win")
  else()
    return() # Not supported
  endif()

  set(OPENCV_ICV_UNPACK_PATH "${CMAKE_CURRENT_LIST_DIR}/unpack")
  set(OPENCV_ICV_PATH "${OPENCV_ICV_UNPACK_PATH}${OPENCV_ICV_PACKAGE_SUBDIR}")

  message(STATUS "ICV: Package successfully downloaded")
  set(OPENCV_ICV_PATH "${OPENCV_ICV_PATH}" PARENT_SCOPE)
endfunction()

_icv_downloader()
  • 6.重新点击cmake中的configure,勾选BUILD_opencv_world!!!这个会让动态库的lib减少到只需要world以及ts两个,非常方便。
    这里写图片描述
    然后如果编译静态库,请把BUILD_SHARED_LIBS去掉!
    这里写图片描述
    设置好后,一次点击configure和generate按钮,即可在之前设置的where to build the binaries目录下生成opencv解决方案,如下图所示
    这里写图片描述
  • 7.选择生成-批生成,勾选中INSTALL的Debug以及Release,再点击生成,经过非常漫长的等待就生成所需要的动态库或者静态库。
    这里写图片描述
    这里写图片描述
展开阅读全文

没有更多推荐了,返回首页