Windows7系统下OpenCV2.4.4+PCL1.6.0+SSBA3.0+VS2010 IDE32环境下编译和安装以实现Sfm和PCL点云数据可视化

  最近在学习《深入理解OpenCV:实用计算机视觉项目解析》一书的第三章和第四章时,遇到很多编译问题,书中又没有详细的讲解环境配置和搭建过程。经过多天的捉摸、调试、排错终于将两章的程序都调试成功了,先做个记录以备忘。概述的英文名为:《Mastering OpenCV with Practical Computer Vision Projects》。

一、开发环境概述

  1、OpenCV版本:2.4.4;

  2、PCL版本:1.6.0;

  3、SSBA版本:3.0;

  4、IDE版本:VS2010 32位,字符集:使用多字节字符集

  5、PCL如果涉及到OpenGL,则采用OpenGL32.lib和OpenGL.dll。

二、OpenCV2.4.4编译和安装

  1、OpenCV2.4.4下载地址:https://github.com/opencv/opencv/releases?after=2.4.6.1,如下图所示:

  2、具体的编译和配置工作参考:OpenCV2.4.12 开启OpenGL启用三维可视化支持

  注意:(1)第一次点击“Configure”时,请在“Specify the generator for this project”选择“Visual Studio 10”,该选项是32位的;

     (2)如果你的计算机上已经安装了英伟达GPU CUDA驱动程序,则CMake会检测出来并默认勾选上“WITH_CUDA”。一般情况下,大家的计算机的GPU卡的计算能力CC不够高,为了避免后续编译时出现的各种错误,此去请不要勾选上“WITH_CUDA”。除非你的显卡支持能够支持高级的CUDA计算能力,才能够编译通过。

     (3)OpenCV默认情况下是不支持OpenGL的,如果要使OpenCV支持OpenGL,则需要重编译。则需要勾选上“WITH_OPENGL”。如下图所示:

  3、常见编译问题汇总:

  1. OPENCV3.3+CUDA9.0 环境搭建若干错误总结
  2. VS2010自行编译OpenCV2.4.4时缺少python27_d.lib的解决方法
  3. VS2015+OpenCV3.3 GPU模块和opencv_contrib模块的编译以及采用CMake编译opencv_contrib时提示“No extra modules found in folder”问题的解决方案

三、PCL1.6.0编译和安装

  PCL1.6.0下载、编译和安装请参考文档:VS2010中配置PCL

四、SSBA3.0编译和安装

  SSBA3.0下载、编译和安装请参考博文:VS2013+简单稀疏光束调整库SSBA配置(64位编译)

  注意:该链接中编译出来的colamd.lib和V3D.lib都是静态库,没有*.dll后缀的文件。因为colamd和V3D两个项目的配置类型都是“静态库(.lib)”。如下图所示:

五:其它注意事项

  1、所有的所依赖的第三方开源框架库都配置好后,如果还需要OpenGL库的话,需要给工程文件添加OpenGL32.lib的静态到入库(项目属性-连接器-输入-附加依赖项)和OpenGL.dll动态链接库。

  2、在编译的过程中可能会提示“vtk***无法解决的外部符号”,如下所示:

1>vtkSDIDoc.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: thiscall vtkSmartPointerBase::vtkSmartPointerBase(void)" ([email protected]@[email protected]),该符号在函数 "public: thiscall vtkSmartPointer::vtkSmartPointer(void)" (??0?[email protected]@@@@[email protected]) 中被引用
1>vtkSDIView.obj : error LNK2001: 无法解析的外部符号 "declspec(dllimport) public: thiscall vtkSmartPointerBase::vtkSmartPointerBase(void)" (imp_??[email protected]@[email protected])
1>vtkSDIDoc.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: thiscall vtkSmartPointerBase::~vtkSmartPointerBase(void)" ([email protected]@[email protected]),该符号在函数 "public: thiscall vtkSmartPointer::~vtkSmartPointer(void)" (??1?[email protected]@@@@[email protected]) 中被引用
1>vtkSDIView.obj : error LNK2001: 无法解析的外部符号 "declspec(dllimport) public: thiscall vtkSmartPointerBase::~vtkSmartPointerBase(void)" (imp_??[email protected]@[email protected])
1>vtkSDIDoc.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: class vtkSmartPointerBase & thiscall vtkSmartPointerBase::operator=(class vtkObjectBase *)" ([email protected]@[email protected]@@@Z),该符号在函数 "public: class vtkSmartPointer & thiscall vtkSmartPointer::operator=(class vtkImageData *)" (??4?[email protected]@@@@[email protected]@@@Z) 中被引用
1>vtkSDIDoc.obj : error LNK2019: 无法解析的外部符号 "declspec(dllimport) public: class vtkSmartPointerBase & thiscall vtkSmartPointerBase::operator=(class vtkSmartPointerBase const &)" ([email protected]@[email protected]@@Z),该符号在函数 "public: class vtkSmartPointer & thiscall vtkSmartPointer::operator=(class vtkSmartPointer const &)" (??4?[email protected]@@@@[email protected]@@Z) 中被引用
1>vtkSDIView.obj : error LNK2001: 无法解析的外部符号 "declspec(dllimport) public: class vtkSmartPointerBase & thiscall vtkSmartPointerBase::operator=(class vtkSmartPointerBase const &)" (imp_??[email protected]@[email protected]@@Z)
1>vtkSDIDoc.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) protected: thiscall vtkSmartPointerBase::vtkSmartPointerBase(class vtkObjectBase *,class vtkSmartPointerBase::NoReference const &)" ([email protected]@[email protected]@@[email protected]0@@Z),该符号在函数 "protected: thiscall vtkSmartPointer::vtkSmartPointer(class vtkImageData *,class vtkSmartPointerBase::NoReference const &)" (??0?[email protected]@@@@[email protected]@@[email protected]@@@Z) 中被引用
1>vtkSDIView.obj : error LNK2001: 无法解析的外部符号 "declspec(dllimport) protected: thiscall vtkSmartPointerBase::vtkSmartPointerBase(class vtkObjectBase *,class vtkSmartPointerBase::NoReference const &)" ([email protected]@[email protected]@@[email protected]0@@Z)
1>vtkSDIDoc.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: static class vtkImageData * cdecl vtkImageData::New(void)" ([email protected]@@[email protected]),该符号在函数 "public: static class vtkSmartPointercdecl vtkSmartPointer::New(void)" ([email protected][email protected]@@@@SA?[email protected]) 中被引用
1>vtkSDIDoc.obj : error LNK2019: 无法解析的外部符号 "declspec(dllimport) public: class vtkImageData * thiscall vtkImageAlgorithm::GetOutput(void)" ([email protected]@@[email protected]@XZ),该符号在函数 "public: void thiscall CvtkSDIDoc::OnFileOpen(void)" (?[email protected]@@QAEXXZ) 中被引用
1>vtkSDIDoc.obj : error LNK2019: 无法解析的外部符号 "declspec(dllimport) public: static class vtkJPEGReader * cdecl vtkJPEGReader::New(void)" ([email protected]@@[email protected]),该符号在函数 "public: static class vtkSmartPointercdecl vtkSmartPointer::New(void)" ([email protected][email protected]@@@@SA?[email protected]) 中被引用
1>vtkSDIView.obj : error LNK2019: 无法解析的外部符号 "declspec(dllimport) public: static class vtkImageViewer2 * cdecl vtkImageViewer2::New(void)" ([email protected]@@[email protected]),该符号在函数 "public: static class vtkSmartPointercdecl vtkSmartPointer::New(void)" ([email protected][email protected]@@@@SA?[email protected]) 中被引用
1>vtkSDIView.obj : error LNK2019: 无法解析的外部符号 "declspec(dllimport) public: static class vtkRenderWindowInteractor * cdecl vtkRenderWindowInteractor::New(void)" ([email protected]@@[email protected]),该符号在函数 "public: static class vtkSmartPointer __cdecl vtkSmartPointer::New(void)" ([email protected][email protected]@@@@[email protected]) 中被引用

  首先说明,VTK是PCL所依赖的第三方库开源的可视化工具库。此时,需要把C:\Program Files (x86)\PCL 1.6.0\3rdParty\VTK\lib\vtk-5.8目录下的vtk开头的相关*.lib文件通过“项目属性-连接器-输入-附加依赖项”方式添加到工程,但是这样太麻烦,可在“解决方案资源管理器”中的“资源文件”上单击右键-添加-现有项,从而将所有tk开头的相关*.lib文件添加到工程中。如下图所示:

  3、fatal error C1083: 无法打开包括文件:“vtkCommand.h”: No such file or direct:可在系统环境变量PATH中将VTK的包含目录再增加一层:$(PCL_ROOT)\3rdParty\VTK\include\vtk-5.8。其中PCL_ROOT为PCL安装时设置的系统环境变量,其值为:C:\Program Files (x86)\PCL 1.6.0。

  4、OpenCV和PCL同时引用了Flann 引起冲突:Opencv+PCL=Flann 冲突?

  5、安装CMake和PCL-1.6.0-AllInOne-msvc2010-win32.exe打算使安装程序自行将路径添加到系统的环境变量PATH时,会弹出失败提示:path too long installer unable to modify path 导致PCL配置失败记。此时可手工将相关路径添加到系统的环境变量PATH中。path too long installer unable to modify path 导致PCL配置失败记

  6、std::max、std::min error C2589: “(”:“::”右边的非法标记,error C2059: 语法错误:“::”

参考链接:

1、OpenCV2.4.13+CUDA8.0+SSBA3.0+VS2010编译安装

2、WIN7(32位)VS2010+openCV 2.4.10+PCL 1.6.0+CUDA 6.5.14+CMake 3.2.1+SSBA-3.0配置

原文地址:https://www.cnblogs.com/rainbow70626/p/9080057.html

时间: 2024-11-20 02:48:50

Windows7系统下OpenCV2.4.4+PCL1.6.0+SSBA3.0+VS2010 IDE32环境下编译和安装以实现Sfm和PCL点云数据可视化的相关文章

VS2010 C++环境下DLL和LIB文件目录及名称修改

DLL工程,Debug版本下输出文件由basetool.dll basetool.lib 改为basetoolD.dll basetoold.lib 需设置: 1.配置属性-常规-目标文件名 $(ProjectName) 加d 2.配置属性-连接器-常规-输出问件 由 加d 3.配置属性-连接器-高级-导入库,设置文件名$(OutDir)$ProjectName)d.lib 4.如果有导出文件,.def文件中也一定要修改导出库的名字 LIBRARY      "BaseTool" 变为

Windows 2008下 rman backup scirpts(备份脚本)--已经在生产环境下通过验证

一.任务计划 windows -控制面板-管理工具-计划任务程序,右击"任务计划程序库","创建任务" 二:相关脚本中的内容: 2.1  back_rman.bat中的内容: set ORACLE_SID=FS F:\oracle\product\10.2.0\db_1\BIN\rman target / cmdfile=H:\worksql\windows_backupscript\backup.rcv log=H:\worksql\windows_backups

Linux环境下的图形系统和AMD R600显卡编程(1)——Linux环境下的图形系统简介

转:https://www.cnblogs.com/shoemaker/p/linux_graphics01.html Linux/Unix环境下最早的图形系统是Xorg图形系统,Xorg图形系统通过扩展的方式以适应显卡和桌面图形发展的需要,然而随着软硬件的发展,特别是嵌入式系统的发展,Xorg显得庞大而落后.开源社区开发开发了一些新的图形系统,比如Wayland图形系统. 由于图形系统.3D图形本身的复杂以及历史原因,Linux下的图形系统相关的源码庞大而且复杂,而且缺少学习的资料(所有源代码

VS2010 C++环境下DLL和LIB文件的生成与调试

利用VS2010工具,调试DLL文件的方法现总结如下: 在一个解决方案中生成两个工程,假设MYDLL和MYDLG两个工程,前者是DLL工程,后者DLG调用前边的DLL工程.设置如下: 目录如下:图,本文例子中,DLL文件和EXE文件都生成在下边的这个DEBUG文件中:D:\My Documents\Visual Studio 2010\Projects\MYDLL\Debug,当然,也可以生成在其他文件目录下,只要设置正确即可.     目的:遵循DLL和exe最后生成的文件在一个目录内,且两个

Windows环境下搭建Redis

当网站从数据库加载大量数据的时候会遇到页面响应速度特别缓慢的情形,为了能够更快的从数据库中取得数据加载至内存中,可以考虑使用Memcached来做数据缓存,或者使用内存数据库(比如Redis)将数据库的内容加载至内存中以键值对的形式存储,当页面请求数据的时候可以直接从内存数据库中获取,从而提高了网站的响应速度. Redis在官方文档中声明推荐在Linux环境下安装部署,但实际情况下会有很多开发者需要在Windows环境下解决以上类似的问题并想要采取Redis方案来解决问题,好在微软开放了这方面的

win7环境下创建超级隐藏账户

在win7环境下,系统安全得到了加强,今天来看看怎样在win7环境下新建一个超级隐藏用户. 首先,我们需要新建一个普通的账户. 在win7中我们使用net  user  添加或者删除账户都是被拒绝的. 所以,我们只有在控制面板中新加账户. 我们新建一个xiaoqin01$账户 然后我们就需要为当前用户取得管理员权限了,后面查看注册表时还要用到管理员权限.(regedit,进入注册表:regedt32,进入注册表编辑器) 我们在cmd中用net user查看不到我们刚刚新建的xiaoqin01$账

在Win7环境下安装启动Linux

在Win7系统下,安装启动Linux特别的不方便,因为XP下的boot.ini配置文件不在了,要添加一下启动选项的话, 只能使用专门的工具,这或多或少给人带来不爽的感觉,,, 其实Win7下虽然没有了boot.ini文件,但是在C盘目录下的boot.ini文件,同样还是可以添加系统的启动选项的,这让我们又可以脱离专门的配置工具,手动的设置grub4dos,然后启动安装linux,ubuntu了. 首先去网上下载grub4dos这个软件包,然后把"grldr","grldr.m

Oracle RAC 环境下的连接管理(转) --- 防止原文连接失效

崔华老师的文章!!! 这篇文章详细介绍了Oracle RAC环境下的连接管理,分别介绍了什么是 Connect Time Load Balancing.Runtime Connection Load Balancing.Connect Time Connection Failover 和 Runtime Connection Failover,以及里面所涉及到的 TAF.ONS.FCF.FAN.LBA 等诸多知识点.本文主要是针对 Oracle RAC 11gR2 环境下的连接管理,但同时也会对

ElasticHD Linux环境下安装

上一篇讲了ElasticHD windows环境下安装,这一篇继续说明ElasticHD Linux环境下安装,有了安装windows版本下错版本的经验,这次我们直接定位到程序下载页面,选择对应的系统版本,我这次安装的是Cetos 7 64位系统: 打开Xshell,连接到Linux系统中: 第一步:我们来下载程序压缩包,先打开下载地址页(上一篇中有地址),然后选择需要下载的版本,复制下载地址,然后用命令下载: wget https://github.com/360EntSecGroup-Sky