win10下利用CMake重新编译OPenCV+QT(MSVC2015)

win10下利用CMake重新编译OPenCV+QT:MSVC2015

  • 前言
  • 运行环境
  • 下载安装
  • 开始编译
    • 第一次错误处理
  • 将QT环境编译进OpenCV
    • 第二次错误处理
  • 编译环境
  • 最后的环境配置

前言

由于我在用CMake编译的时候遇到了很多问题,网上的文章都不是很全需要翻阅很多文章。所以我在这将我的编译过程和遇到的问题进行总结,供日后翻阅;只针对CMake进行操作

运行环境

  • Windows10
  • Visual Stdio 2015
  • OPenCV 4.0.1
  • Qt 5.9.5
  • CMake-gui

下载安装

从OPenCV官网下载OpenCV源码包(我使用的OpenCV网盘提取码:v17q )

开始编译

  • 记住OpenCV源码的安装路径,打开CMake,选择好源码的路径和编译后的保存路径。
    win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第1张图片
    在这里插入图片描述
  • 在选择好路径之后点击下面的Configure
    win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第2张图片
  • 在弹出窗口中选择

选择Visual Stdio 2015
win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第3张图片
选择好x64和下面的default native compilerswin10下利用CMake重新编译OPenCV+QT(MSVC2015)_第4张图片

第一次错误处理

  • 点击Finish后等待完成,期间注意下面的弹窗,出错部分会显示为红色。
    例:win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第5张图片有时候网络很差,下载速度极慢或者干脆一直下载失败···CMake-Configure也会失败。看到错误提示后根据提示从CMakeDownloadLog.txt中查看下载错误。因情况而定
#use_cache "D:/OpenCV401x64/opencv/sources/.cache"
#do_copy "opencv_ffmpeg.dll" "849286ccc527c99e5a218b67f13c6e8c" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll" "D:/OpenCV401x64/rebuild/3rdparty/ffmpeg"
#missing "D:/OpenCV401x64/rebuild/3rdparty/ffmpeg/opencv_ffmpeg.dll"
#cmake_download "D:/OpenCV401x64/opencv/sources/.cache/ffmpeg/849286ccc527c99e5a218b67f13c6e8c-opencv_ffmpeg.dll" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll"
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

#do_copy "opencv_ffmpeg_64.dll" "96444a4645753aaafa296479665c9185" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg_64.dll" "D:/OpenCV401x64/rebuild/3rdparty/ffmpeg"
#missing "D:/OpenCV401x64/rebuild/3rdparty/ffmpeg/opencv_ffmpeg_64.dll"
#cmake_download "D:/OpenCV401x64/opencv/sources/.cache/ffmpeg/96444a4645753aaafa296479665c9185-opencv_ffmpeg_64.dll" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg_64.dll"
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

#do_copy "ffmpeg_version.cmake" "f710891525a04586d565d0e700e62a9c" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/ffmpeg_version.cmake" "D:/OpenCV401x64/rebuild/3rdparty/ffmpeg"
#missing "D:/OpenCV401x64/rebuild/3rdparty/ffmpeg/ffmpeg_version.cmake"
#cmake_download "D:/OpenCV401x64/opencv/sources/.cache/ffmpeg/f710891525a04586d565d0e700e62a9c-ffmpeg_version.cmake" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/ffmpeg_version.cmake"
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Couldn't resolve host 'raw.githubusercontent.com'
# Closing connection 0
# 

那么问题来了。
去哪里下载?
下载后放哪里?
CMake会在opencv-source目录下有一个.cache文件。如果下载失败的话,里面会有需要下载的内容且里面所有下载失败文件大小会为0KB
win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第6张图片win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第7张图片
win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第8张图片

  • 这个时候再看看下载日志文件中的第一句
    #use_cache "D:/OpenCV401x64/opencv/sources/.cache"意思就是需要从.cache中找
  • 第二句
    #do_copy "opencv_ffmpeg.dll" "849286ccc527c99e5a218b67f13c6e8c" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll" "D:/OpenCV401x64/rebuild/3rdparty/ffmpeg"意思是从"https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll"网址下载丢失的文件并把它复制到:"D:/OpenCV401x64/rebuild/3rdparty/ffmpeg"
  • 这个时候我们就将网址复制下来找个下载器下载需要的文件就可。值得注意的是有的时候因为“网络问题”可能需要科学上网。下载好文件后只需要将下载好的文件复制到.cache目录下的对应文件的指定位置。需要注意将MD值加在文件名前面 格式:“MD值” + “-” + “文件名”。其实只需要将0KB的文件名“-”号前面的值复制到下载好的文件的文件名前就行。win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第9张图片
  • 在将上一步缺失的文件整理好后就可以进行下一步了:再次点击configure会发现不再有下载错误了。

将QT环境编译进OpenCV

  • 在经过上面的步骤后,我们已经将OpenCV环境准备好了。接下来将把QT加入到OpenCV中供我们使用
    首先勾选WITH_QTWITH_OPENGL再次点击configure如果之前的QT安装环境变量没有出现问题就可以在VS中进行编译了。
    WITH_QT
    WITH_OPENGL

第二次错误处理

  • 由于我是用MSVC2015作为QT的编译器由于没有自己添加环境变量导致CMAKE找不到DIRwin10下利用CMake重新编译OPenCV+QT(MSVC2015)_第10张图片
  • 看到这些错误的时候不要怕只需要找到QT的安装路径将所用编译器的对应目录填进取就可了。填写好目录后点击Generate完成后会提示Generating done

编译环境

  • 点击Open Project自动打开vs2015, 找到CMakeTargets下的INSTALL,在Debug和Release下分别右键生成即可。编译需要比较长的时间,编译完成后,就可以编译目录下的install文件夹下看到。
  • 打开VS后先右击ALL_BUILD选择生成等待电表倒转完成后,再生成下面的INSTALL
    win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第11张图片
    全部完毕后在一开始设置好的编译后保存目录中寻找install文件夹
  • 将文件夹下所有内容替换复制到opencv\build
    win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第12张图片
    win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第13张图片

最后的环境配置

  • 到了这一步就已经看到了最后的胜利

  • 新建一个C++空项目选择x64
    在这里插入图片描述

  • 在属性管理器中的Debug | x64目录下添加新建项目属性表这里我取名为OpenCVx64D,打开属性设置win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第14张图片

  • 在VC++目录中的库目录中添加路径.\opencv\build\x64\vc15\lib这个是上一步替换后的路径
    win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第15张图片

  • 同在VC++ 目录下的包含目录中添加以下两条D:\OpenCV401x64\opencv\build\includeD:\OpenCV401x64\opencv\build\include\opencv2
    win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第16张图片

  • 需要从这里找到两个附加依赖项否则编译会出问题win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第17张图片

  • 在连接器的输入中添加附加依赖项opencv_world401d.lib记住Debug下一定要用d结尾的Release下用去掉d的。
    win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第18张图片

  • 到此所有的环境都已经配置好了跑一个例子测试一下,完美!
    win10下利用CMake重新编译OPenCV+QT(MSVC2015)_第19张图片

你可能感兴趣的:(opencv,c++,cmake,linux)