背景

因工作需要使用openCV中的Viz模块,而默认的OpenCV包是不含viz模块的。故需特别安装,现将安装过程简要记录如下,以作备忘。
OpenCV 2.4.13
VTK 7.1.1
CMake-Gui 3.10.1
Visual Studio 2015
Windows 10 x64

安装过程

0. 安装Cmake

无论是VTK还是OpenCV的安装都需要先使用CMake生成VS工程文件,所以必须在正式开始安装之前准备好CMake。我是用的是Cmake-Gui 3.10.1,可以在这里下载到。CMake的安装很简单,不再赘述。

1. 编译安装VTK

因为OpenCV的viz模块是基于VTK库的,所以在安装viz之前必须先安装VTK库。VTK库的源文件在www.vtk.org可以下载到。我选择了7.1.0版本。将源文件解压到某文件夹,如:D:\VTK-7.1.1

打开Cmake-GUI,在第一行where is the source code中选择上面解压的源文件,即D:\VTK-7.1.1。第二行where to build the binaries选择生成结果的目标位置,这里我选择D:\VTK-7.1.1build。点击Configure,第一次Configuration时会让你选择生成器。这里选择 “Visual Studio 14 2015”。这里如果选错了,会发生如下错误:

CMake Error at CMakeLists.txt:64 (project):Failed to run MSBuild command:MSBuild.exeto get the value of VCTargetsPath:

这时可以换一个生成结果的目标位置再次点击Configure,然后会再次让你选择生成器。

这个生成过程会持续一小段时间。之后会在Cmake界面出现一系列配置选项。其中需要做三处修改:
* 选中BUILD_SHARED_LIBS项
* 取消选中BUILD_EXAMPLES项
* 取消选中BUILD_TESTING项
后两处操作主要是为了加快生成速度。修改完成后点击Generate生成VS工程文件。这个过程持续时间更长。

生成完毕后用管理员身份打开D:\VTK-7.1.1build中的VTK.sln或者用管理员身份运行VS2015然后从程序内打开这个sln文件。这是因为VTK的默认安装位置在C盘Program Files文件夹内,这个文件夹需要管理员权限才能写入。在这个个工程中右键单击ALL_BUILD项目然后选择build。我分别用debug x64和release x64进行了build。这个也要持续很久。

Build完ALL_BUILD项目之后,右键单机INSTALL项目,选择Projekt Only ->Build Only INSTALL以完成安装过程。注意如果之前没有使用管理员身份运行,这里可能会安装失败。至此VTK安装完成。默认安装在C:\Program Files\VTK

2. 编译OpenCV

在网上下载好OpenCV的源代码或windows安装文件。在使用windows安装文件后,源代码和编译后的文件会分别解压到build和source文件夹。但是这个build中是不包含viz模块的。如果要使用viz模块必须自行手动编译。如果使用OpenCV 3.0以上版本,根据相关教程,可能还需要在这里下载OpenCV contrib模块。这个模块集成了一些实验性功能的源代码。但是我是用的是OpenCV 2.4.13版本,viz的源代码已经集成在source文件夹中了,无需单独下载,只需要手动编译。

与VTK安装过程类似,在Cmake的第一行选择Opencv的source文件夹,比如D:\opencv\sources。第二行选择输出位置,比如D:\opencv-build。同样的选择生成器为VS 2015完成Configuration。完成后会出现一系列编译选项。其中比较重要的是必须选中WITH_VTK项并且令VTK_DIR=C:/Program Files/VTK/lib/cmake/vtk-7.1(VTK安装目录。某些教程也说选择VTKbuild目录,即D:\VTK-7.1.1build·)。如果没有VTK_DIR选项可能需要先点击一下Generate之后会出现。

这时可能出现下列警告,但是无需理会。

CMake Warning at cmake/OpenCVPackaging.cmake:23 (message):CPACK_PACKAGE_VERSION does not match version provided by version.hppheader!
Call Stack (most recent call first):CMakeLists.txt:1103 (include)

生成之后,同样用管理员身份打开OpenCV.sln工程文件。打开之后分别用release和debug模式build ALL_BUILD模块。然后再同样地分别用release和debug模式build INSTALL。

在这一过程我遇到了下列错误:

1>     Creating library D:/opencv-build2/lib/Release/opencv_viz2413.lib and object D:/opencv-build2/lib/Release/opencv_viz2413.exp
1>vizcore.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: static class vtkOBJReader * __cdecl vtkOBJReader::New(void)" (__imp_?New@vtkOBJReader@@SAPEAV1@XZ) referenced in function "public: static class vtkSmartPointer<class vtkOBJReader> __cdecl vtkSmartPointer<class vtkOBJReader>::New(void)" (?New@?$vtkSmartPointer@VvtkOBJReader@@@@SA?AV1@XZ)
1>vizcore.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: static class vtkOBJReader * __cdecl vtkOBJReader::SafeDownCast(class vtkObjectBase *)" (__imp_?SafeDownCast@vtkOBJReader@@SAPEAV1@PEAVvtkObjectBase@@@Z) referenced in function "class cv::Mat __cdecl cv::viz::readCloud(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class cv::_OutputArray const &,class cv::_OutputArray const &)" (?readCloud@viz@cv@@YA?AVMat@2@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBV_OutputArray@2@1@Z)
1>vizcore.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: static class vtkSTLReader * __cdecl vtkSTLReader::SafeDownCast(class vtkObjectBase *)" (__imp_?SafeDownCast@vtkSTLReader@@SAPEAV1@PEAVvtkObjectBase@@@Z) referenced in function "class cv::Mat __cdecl cv::viz::readCloud(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class cv::_OutputArray const &,class cv::_OutputArray const &)" (?readCloud@viz@cv@@YA?AVMat@2@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBV_OutputArray@2@1@Z)
1>vizcore.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: static class vtkSTLReader * __cdecl vtkSTLReader::New(void)" (__imp_?New@vtkSTLReader@@SAPEAV1@XZ) referenced in function "public: static class vtkSmartPointer<class vtkSTLReader> __cdecl vtkSmartPointer<class vtkSTLReader>::New(void)" (?New@?$vtkSmartPointer@VvtkSTLReader@@@@SA?AV1@XZ)
1>D:\opencv-build2\bin\Release\opencv_viz2413.dll : fatal error LNK1120: 4 unresolved externals

经检查这是因为编译器无法解释vtkOBJReadervtkSTLReader这两个类,而根据文档,这两个类属于vtkIOGeometry模块。所以只需要在编译器配置中加上这一个模块即可。具体的,右键点击opencv_viz,然后在preperties->Linker->Input->Additional Dependencies中加入C:\Program Files\VTK\lib\vtkIOGeometry-7.1.lib即可顺利完成编译过程。

截至目前含有viz模块的OpenCV安装完成。但是要在程序中正常调用还需要配置Visual Studio的编译器设置。这一过程可以参考标准OpenCV在Visual Studio的配置过程。相关的教程和教学视频在网上非常丰富了,此处不再赘述。需要注意的是,在使用viz的时候会间接用到VTK的动态链接库,所以也要将VTK库的.dll文件的位置加入到windows环境变量之中。

OpenCV中Viz模块的安装(VS2015)相关推荐

  1. pythoncv2模块详细介绍_python中cv2模块的安装方法

    python中cv2模块的安装方法 发布时间:2020-07-09 14:40:18 来源:亿速云 阅读:115 作者:清晨 小编给大家分享一下python中cv2模块的安装方法,希望大家阅读完这篇文 ...

  2. python中的time库安装步骤-python中time模块需要安装么

    time是python自带的模块,用于处理时间问题,提供了一系列的操作时间的函数. time模块中时间表现的格式主要有三种:(推荐学习:Python视频教程) timestamp时间戳,是以秒表示从& ...

  3. OpenCV中GPU模块使用

    CUDA IT168的文章系列: Cuda的初始化 :http://tech.it168.com/a2011/0715/1218/000001218458.shtml OpenCV: OpenCV中G ...

  4. 关于PyCharm中python模块无法安装的问题

      自己也是刚接触python不久,完全自学,所以很多地方总是遇到各种问题,下边是自己刚发现的一个问题,所述如有欠妥或者错误之处,欢迎指正   首先关于模块的安装,方法很多,可以自己在命令行下pip ...

  5. python中win32模块的安装及使用方法

    1. 安装命令 win32安装包含win32api . win32com . win32gui pip3 install pywin32 网上也有说pip3 install pipywin32 的,这 ...

  6. opencv中ArUco模块实践(1)

    论文阅读模块将分享点云处理,SLAM,三维视觉,高精地图相关的文章.公众号致力于理解三维视觉领域相关内容的干货分享,欢迎各位加入我,我们一起每天一篇文章阅读,开启分享之旅,有兴趣的可联系微信diany ...

  7. opencv中image watch插件安装与使用教程

    Image Watch是OpenCV的一款最新工具,它能够即时显示出矩阵的内容,即memory中Mat的信息,方便程序的调试,非常好用,目前它可以支持vs2012.vs2013及vs2015. 下载最 ...

  8. 在python中requests模块怎么安装_Python requests模块在Windows下安装

    发现一个爬虫库太方便了,而且支持python3! 安装方法在http://docs.python-requests.org/en/latest/user/install/#install很详细 只不过 ...

  9. linux python mysqldb安装包,linux环境下python中MySQLdb模块的安装方法

    前言 最近开始学习python数据库编程后,在了解了基本概念,打算上手试验一下时,卡在了MYSQLdb包的安装上,折腾了半天才解决.记录一下我在linux中安装此包遇到的问题. 系统是ubuntn15 ...

最新文章

  1. Linux用init命令关机、重启、切换模式
  2. Oracle恢复删除的数据
  3. HTML 中多媒体设置:1、滚动字幕及滚动图片的设置 2、音乐视频的插入
  4. 安卓案例:标准化测试
  5. 20210307:力扣第231周周赛(上)
  6. SpringMVC文件上传(三)异常栈处理
  7. 删除百度贴吧上的内容
  8. 几何画板椭圆九种画法_几何画板中椭圆的几种构造方法
  9. 全国区块链信息服务备案超千个
  10. 微信小程序报错:47001 - data format error hint
  11. 拟合数据和原始数据误差计算
  12. 用C语言编写大写字母用ascll表示,用java实现输入ASCII码,打印出对应的大写字母。...
  13. 程序员为什么单身?细数程序员六宗罪
  14. python无限循环小数_如何把一个无限循环小数转换成一个分数(算法)
  15. 服务器被黑怎么用防御系统解决
  16. Ubuntu18.04安装分析
  17. 好玩的Python库tqdm
  18. c语言寄存器头文件共用重复定义,C语言头文件的使用
  19. scanf(“%*[\n]%[^\n]“,s)是什么意思?
  20. C++ Primer Plus (第六版)编程练习记录(chapter4)

热门文章

  1. 2018 ACM-ICPC Syrian Collegiate Programming Contest
  2. Android系列之Navigation的目的地(Destination)
  3. AndroidTV语音搜索
  4. Leetcode466.统计重复个数——掐头去尾寻找循环点
  5. 计算机组装如何配置更好更便宜,电脑组装越贵越好?小白DIY组装电脑的几个误区...
  6. 【转载】如何自己DIY组装一台台式电脑
  7. ora.eons offline
  8. web技术分享| AudioContext 实现音频可视化
  9. 中台之上:商业银行业务架构设计
  10. Java存储金额解决方案BigDecimal