精华内容
下载资源
问答
  • OpenMVG+OpenMVS配置.docx

    2020-05-13 11:46:25
    10 下使用VS2015对OpenMVG+OpenMVS配置,附带有详细的参数设置和安装过程截图
  • OpenMVS配置 参考链接: https://www.cnblogs.com/phillee/p/13085244.html https://github.com/cdcseacave/openMVS/wiki/Building 文章目录OpenMVS配置1 配置依赖2 编译OpenMVS3 make的过程中出现undefined ...

    OpenMVG配置

    直接按照 build wiki 的步骤一步一步来就没问题。

    # Install the required external libraries.
    sudo apt-get install libpng-dev libjpeg-dev libtiff-dev libxxf86vm1 libxxf86vm-dev libxi-dev libxrandr-dev
    # If you want see the view graph svg logs, install Graphviz.
    sudo apt-get install graphviz
    # Checkout OpenMVG.
    git clone --recursive https://github.com/openMVG/openMVG.git
    # 设置编译和安装路径
    cd openMVG
    mkdir openmvg-build
    mkdir openmvg-bin
    cd openmvg-build
    # Configure and build
    cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/path/to/openMVG/openmvg-bin ../src/
    cmake --build . --target install
    

    OpenMVS配置

    参考链接

    https://www.cnblogs.com/phillee/p/13085244.html

    https://github.com/cdcseacave/openMVS/wiki/Building

    1 配置依赖

    因为wiki里面的指导不一定能安装成功。故做以下更改

    #Prepare and empty machine for building:
    sudo apt-get update -qq && sudo apt-get install -qq
    sudo apt-get -y install git cmake libpng-dev libjpeg-dev libtiff-dev libglu1-mesa-dev
    main_path=`pwd`
    
    #Eigen (Required)
    git clone https://gitlab.com/libeigen/eigen.git --branch 3.2
    mkdir eigen_build && cd eigen_build
    cmake . ../eigen
    make && sudo make install
    cd ..
    
    #Boost (Required)
    sudo apt-get -y install libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-serialization-dev
    
    #OpenCV (Required
    `此处更改`
    # Build opencv from source
    
    git clone https://github.com/opencv/opencv.git
    cd opencv
    git reset --hard 3.4.1
    mkdir opencv-bin
    mkdir opencv-build && cd opencv-build
    cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/path/to/opencv/opencv-bin ..
    make -j8
    make install
    
    `以下不变`
    #CGAL (Required)
    sudo apt-get -y install libcgal-dev libcgal-qt5-dev
    
    #VCGLib (Required)
    git clone https://github.com/cdcseacave/VCG.git vcglib
    
    #Ceres (Optional)
    sudo apt-get -y install libatlas-base-dev libsuitesparse-dev
    git clone https://ceres-solver.googlesource.com/ceres-solver ceres-solver
    mkdir ceres_build && cd ceres_build
    cmake . ../ceres-solver/ -DMINIGLOG=ON -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
    make -j8 && sudo make install
    cd ..
    
    #GLFW3 (Optional)
    sudo apt-get -y install freeglut3-dev libglew-dev libglfw3-dev
    
    
    

    2 编译OpenMVS

    此处使用的是我自己的Boost、OpenCV、VCG路径

    #OpenMVS
    git clone https://github.com/cdcseacave/openMVS.git openMVS
    cd openMVS
    
    mkdir openmvs-build && cd openmvs-build
    
    cmake -DOpenCV_DIR=/home/wya/Project/opencv-3.4.13/build/ -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT=/home/wya/Project/vcglib -DBOOST_ROOT=/home/wya/Project/boost_1_64_0 -DBUILD_SHARED_LIBS=ON ..
    
    
    #If something goes wrong, try to set shared libs OFF
    
    #Install OpenMVS library (optional):
    make -j8
    sudo make install
    

    3 make的过程中出现undefined reference错误

    [100%] Linking CXX executable ../../bin/Viewer
    /usr/bin/ld: CMakeFiles/Viewer.dir/Image.cpp.o: undefined refere
    nce to symbol '_ZN2cv6resizeERKNS_11_InputArrayERKNS_12_OutputAr
    rayENS_5Size_IiEEddi'
    //root/misc_codes/opencv/opencv-bin/lib/libopencv_imgproc.so.3.4
    : error adding symbols: DSO missing from command line
    collect2: error: ld returned 1 exit status
    apps/Viewer/CMakeFiles/Viewer.dir/build.make:229: recipe for tar
    get 'bin/Viewer' failed
    make[2]: *** [bin/Viewer] Error 1
    CMakeFiles/Makefile2:732: recipe for target 'apps/Viewer/CMakeFi
    les/Viewer.dir/all' failed
    make[1]: *** [apps/Viewer/CMakeFiles/Viewer.dir/all] Error 2
    Makefile:129: recipe for target 'all' failed
    make: *** [all] Error 2
    

    openMVS的git issue里面提到的思路或许能解决问题

    img

    in CMakeList.txt, add lines like below (replace {{target_name}} to your own):
    
    find_package(Boost COMPONENTS system filesystem REQUIRED)
    target_link_libraries({{target_name}} ${Boost_FILESYSTEM_LIBRARY})
    target_link_libraries({{target_name}} ${Boost_SYSTEM_LIBRARY})
    

    实际解决时,在每一个模块下面的CMakeLists.txt中添加动态链接库

    4 Run过程中遇到的问题

    error: "There is no defined intrinsic data in order to compute an essential matrix for the initial pair."
    

    解决方案

    参考 openMVS git issue

    img

    至此配置完成,找一些数据如Middlebury dino/temple、DTU scan9、ETHD Pipes、Strecha fountain-P11等就可以运行测试了。

    5 使用库

    In order to use OpenMVS as a third-party libray in your project, first compile it as described above or simply use vcpgk:

    vcpkg install openmvs
    

    And inside your project CMake script, use:

    find_package(OpenMVS)
    if(OpenMVS_FOUND)
    	include_directories(${OpenMVS_INCLUDE_DIRS})
    	add_definitions(${OpenMVS_DEFINITIONS})
    endif()
    
    add_executable(your_project source_code.cpp)
    target_link_libraries(your_project PRIVATE OpenMVS::MVS)
    
    展开全文
  • 包含OpenMVG及OpenMVS配置的相关资源
  • 包含OpenMVG及OpenMVS配置所需的相关资源
  • OpenMVS配置注意事项

    千次阅读 2018-02-01 15:39:34
    参考OpenMVS配置方法final(存于百度云盘/AR组/) 1.vs2015使用with updat3版本,在安装后,需要保证项目编译器中包含了visual c++,否则cmake在编译的时候会提示找不到编译器 2.QT的安装需要使用5.6.9,因为...
    配置OpenMvs++OpenMvg中额外注意事项
    


    参考OpenMVS配置方法final(存于百度云盘/AR组/)


    1.vs2015使用with updat3版本,在安装后,需要保证项目编译器中包含了visual c++,否则cmake在编译的时候会提示找不到编译器
    2.QT的安装需要使用5.6.9,因为这个在QT官网可以下载到,需要使用win64版本,不能用x86
    3.尽量对应版本,有的从github上下载最新版
    4.cgal/bin添加path时去c盘的program下cgal复制过来,编译出来的没有
    4.OpenMvg在编译的时候会报错,将size_t改为int型,根据提示,一共有4处
    5.需要安装libjpeg和libpng,libjpeg只能用9a版本,win32.mak需要下载并且放到文件夹里,用vs2015 x64,本机命令提示符编译
    6.libpng使用1.5.28 zlib使用1.2.5,这两个库版本需要对应。下载后解压,然后运行C:\openMVS\Png\libpng-1.5.28\projects\vstudio
    配置管理器添加x64版本,然后编译第一个和最后一个,在cmake编译时候,在对应处添加,inlcude_dir
    为libpng1.5.28.zlib1.2.5,对应的debug和release为C:\openMVS\Png\libpng-1.5.28\projects\vstudio\x64\Release,debug类似
    7.编译libpng完成后,再其目录下搜索.dll,将该文件复制到system32下
    8.opencv对应的dll需要复制到system32下,或者syswow64,取决于你使用的cmd是哪个cmd,win+R默认
    呼出的是32位


    使用方法


    1。参照documentation,先使用Openmvg下的C:\openMVS\build\openMVG\software\SfM中的SfM_SequentialPipeline
    对图片运行,cd到该目录,命令格式为,python SfM_SequentialPipeline.py [full path image directory] [resulting directory] //输入命令实际不加[]
    2.在E:\images\out\reconstruction_sequential 文件夹下得到sfm_data.bin,然后使用C:\openMVS\build\openMVG\Windows-AMD64-Release\Release中的openMVG_main_openMVG2PMVS
    做转换,格式为openMVG_main_openMVG2PMVS -i [sfm_data_bin的绝对路径] -o [输出scene.mvs的绝对路径]// eg:openMVG_main_openMVG2PMVS -i E:\input\sfm_data_bin -o E:\output\scene.mvs
    3.得到了scene.mvs ,然后将OpenMVS中C:\openMVS\build\openMVS\bin\vc14\x64\Release中的的文件和scene.mvs存在同一文件夹,并且在该文件夹建立子文件夹,将原始的图片集放在里面,
    文件夹的名字为undistorted_images
    4.按照OpenMVS的documentation,运行DensifyPointCloud 得到scene_dense.mvs
    5.运行ReconstructMesh 得到scene_dense_mesh.mvs.
    6.运行RefineMesh,这一步需要消耗大量内存,考虑到计算机性能再决定运不运行,4g内存不可以
    7.运行TextureMesh 得到scene_dense_mesh_refine_texture,如果没有refine这一步,文件名去掉refine
    8.用meshlab查看即可。
    9.如果图片集本身不包含exif信息,那么再运行ReconstructMesh时会报错。此时,需要人工指定焦距SfM_SequentialPipeline中
    print ("1. Intrinsics analysis")
    pIntrisics = subprocess.Popen( [os.path.join(OPENMVG_SFM_BIN, "openMVG_main_SfMInit_ImageListing"),  "-i", input_dir, "-o", matches_dir, "-d", camera_file_params,"-f","1500"] )
    pIntrisics.wait()
    第二行,添加可选参数,“-f”,"焦距",其计算方式为  f=max(width,height)*(相机焦距/ccd的宽度)
    10.对于png的使用,相同
    展开全文
  • 基于win10下VS2019的OpenMVG + OpenMVS配置图文教程(附带错误改正和运行教学,亲测可用) 主要配置:windows10,VS2019(其他版本均可,配置相似)
  • openmvg和openmvs配置及学习

    千次阅读 2018-10-22 22:33:07
    openmvg和openmvs配置及学习 转载https://blog.csdn.net/weixin_36408769/article/details/71512934?locationNum=9&fps=1 更新于2018年7月24日 经过了近一年的学习,总结各方面经验,还是极其强烈的建议初...

    openmvg和openmvs配置及学习


    转载 https://blog.csdn.net/weixin_36408769/article/details/71512934?locationNum=9&fps=1
    更新于2018年7月24日

    经过了近一年的学习,总结各方面经验,还是极其强烈的建议初入三维重建的朋友几点:

    1.不要在Windows系统下装openmvg和openmvs了,直接用上Linux系统吧,Ubuntu14.04或者16都可以,openmvg和openmvs在Linux上的安装简直不要太简单,百度去两个库的主页,通过命令行就全部安装好了,真的很方便,而且既然接触编程,使用Linux也是很好的选择。不要再在Windows下挣扎了!

    2.目前视觉SLAM很火,而且和三维重建有很多交叉,只是侧重不同,目前没有好的入门三维重建的书,但是入门SLAM的书有一本很好的,视觉SLAM十四讲,通过这本书的学习,你也将会对三维重建有更好的了解及基础。

    更新于2017年5月12日。


    最近开始在做基于二维图像的三维重建项目,OpenMVG和OpenMVS可谓是必不可少的两个库,但网上配置及学习资料太少,花了整整一个月的时间才将库配置好,过程可谓艰难。本人也是入门级,此贴的目的在于将自己的经验分享给大家,给后来者提供一些方向和提示,望多交流,批评指正,建群一起学习。
    OpenMVS是在OpenMVG的基础上的进一步操作,因此我们先来配置OpenMVG。
    
     
    • 1
    • 2

    1、OpenMVG配置

    首先需要一台比较“干净”的电脑,因为配置过程会用到许多的第三方库,以及对系统环境的配置,若电脑内已经装了类似opencv、boost等的,容易出现版本不匹配等各种意想不到的错误,因此建议还是删干净,或者是在虚拟机里搭(前提是电脑配置够好,不然跑不动程序),或者是用一台新的电脑,由于我笔记本之前就做图像处理,因此乱七八糟的东西很多,配了半个多月都没配好,最后还是在一台新的台式机上配置好的。另外,我的基本环境是Win10+VS2015,其他的环境没试过,不能保证可行。
    第二点是,本文在配置阶段主要参考了http://blog.csdn.net/mitsubishisony/article/details/52332470,然后根据自己的实际操作过程进行了一些补充,具体内容大家可以在http://download.csdn.net/detail/weixin_36408769/9838169下载。前面也说到,整个配置过程会使用到不少的第三方库,为了大家方便,特将相关的安装包提供给大家,共有三个压缩包1:http://download.csdn.net/detail/weixin_36408769/9838075  2:http://download.csdn.net/detail/weixin_36408769/9838077  3:http://download.csdn.net/detail/weixin_36408769/9838150。大家下载好后先把第三个安装包的cmake及git安装好。由于上传文件大小的限制,还有几个太大的文件放网盘了:链接:http://pan.baidu.com/s/1dF5oYtV 密码:2hdl。最后VS2015社区版的安装镜像文件也放在了网盘链接:http://pan.baidu.com/s/1pKCLPEF 密码:s9df,大家下一个虚拟光驱的软件就能运行了。
    
     
    • 1
    • 2

    2、OpenMVG学习

    openMVG提供了一个可以解决计算机视觉问题并构建完整SFM流程的小型库集合。下面对库的内容依次介绍。
    **图像库**
    图像容器:
        OpenMVG Image <T>类可以存储灰度,RGB,RGBA或自定义的图像数据,提供基于像素的图像读写操作。基本方法如下:
    
     
    • 1
    • 2
    • 3
    • 4
    // A 8-bit gray image:
    Image<unsigned char> grayscale_image_8bit;
    
    // A 32-bit gray image:
    Image<double> grayscale_image_32bit;
    
    // Multichannel image: (use pre-defined pixel type)
    
    // A 8-bit RGB image:
    Image<RGBColor> rgb_image_8bit;
    Image<Rgb<unsigned char> > rgb_image2_8bit;
    
    // 8-bit RGBA image
    Image<RGBAColor> rgba_image_8bit;
    Image<Rgba<unsigned char> > rgba_image2_8bit;
    
    // 32 bit RGB image:
    Image<Rgb<double> > rgb_image_32bit;
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    图像I/O操作:
    
     
    • 1
    // Read a grayscale image (if conversion need, it is done on the fly)
    Image<unsigned char> gray_image;
    bool bRet = ReadImage("Foo.imgExtension", &gray_image);
    
    // Read a color image
    Image<RGBColor> rgb_image_gray;
    bool bRet = ReadImage("Foo.imgExtension", &rgb_image);
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    图像绘制操作:
    
     
    • 1
    Image<unsigned char> image(10,10);
    image.fill(0);
    
    // Pixel access is done as matrix (row, line)
    int row = 2;
    int column = 4;
    image(row, column) = 127;
    
    // Horizontal scanline
    DrawLine( 0, 5, w-1, 5, 255, &image);
    
    // Circle of radius 3 and center (5,5)
    const int radius = 3;
    const int x = 5, y = 5;
    DrawCircle(x, y, radius, (unsigned char)255, &image);
    
    // Ellipse of center (5,5) and (3,0
    const int radius1 = 3, radius2 = 1, angle = 0;
    const int x = 5, y = 5;
    
    DrawEllipse(x, y, radius1, radius2, (unsigned char)255, &image, (double)angle);
    
    // Example with a RGB image
    Image<RGBColor> imageRGB(10,10);
    DrawCircle(x, y, radius, RGBColor(255,0,0), &imageRGB);
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    数学和线性代数库

    该模块提供依赖于[Eigen]库的数学和线性代数工具。 Eigen是线性代数的C ++模板库。基本思想是提供给openMVG:
    
     
    • 1

    •用于矩阵和向量的高级别内存容器,
    •容易的矩阵和向量操纵,
    •数字求解器和相关算法的集合。
    矢量,矩阵容器:
    OpenMVG重新定义了代码一致性和清晰度的一些特征基类型(点,向量,矩阵):
    •Vec2将单个2d点存储为列矩阵(x,y)
    •Vec3将单个3d点存储为列矩阵(x,y,z)
    •Vec2f,Vec3f浮点版本。
    •Vec是一个值的向量(双精度)
    •Vecf一个浮点值的向量
    •Mat对于通用矩阵容器,
    •Mat2X收集由2d列存储的列,
    •Mat3X将3d点的集合存储为列。
    // Create a set of 2D points store as column
    //创建一组2D点存储为列
    Mat2X A(2, 5);//2行5列
    A << 1, 2, 3, 4, 5,
    6, 7, 8, 9, 10;
    A.col(); // return a column vector : (1,6)^T
    A.row(); // return a row vector : (1,2,3,4,5)
    线性代数
    SVD/QR/LU 分解

    特征库

    该模块为特征和相关描述符提供通用容器。
    特征:提供基本结构和IO来存储基于Point的特征。
    存储点特征的类:PointFeature存储特征的位置(x,y)。SIOPointFeature存储特征(x,y,s,o)的位置,方向和尺度。

    特征描述符:提供描述符数据的基本结构和IO。
    模板

    // SIFT like descriptor
    using siftDescriptorData Descriptor<float, 128>;
    
    // SURF like descriptor
    using surfDescriptorData = Descriptor<float, 64>;
    
    // Binary descriptor (128 bits)
    using binaryDescriptor_bitset = Descriptor<std::bitset<128>,1> binaryDescriptor_bitset;
    // or using unsigned chars
    using binaryDescriptor_uchar = Descriptor<unsigned char, 128/sizeof(unsigned char)>;
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    特征点集:
    存储特征点及其相关描述符:

    template<typename FeaturesT, typename DescriptorsT> class KeypointSet
     
    • 1
    // Define SIFT Keypoints:
    
    // Define the SIFT descriptor [128 floating point value]
    using Descriptor<float, 128> DescriptorT;
    
    // Use SIFT compatible features (scale, orientation and position)
    using FeatureT = SIOPointFeature;
    
    // Describe what a collection of local feature is for a given image:
    using FeatsT = std::vector<FeatureT>;
    using DescsT = std::vector<DescriptorT>;
    
    // Link features and their descriptors as a collection:
    using KeypointSetT = KeypointSet<FeatsT, DescsT>;
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    相机库

    该模块提供不同的相机模型。
    针孔相机模型:
    相机可以由投影模型近似,通常称为针孔投影。 相机的最简单的表示是光敏表面(传感器):图像平面,在给定位置处的透镜(投影投影)和空间中的取向。
    
     
    • 1
    • 2
    • 3

    针孔相机模型,定向中心投影摄像机

    针孔摄像机几何模型的投影相机具有两个子参数,内在和外在参数。 内在参数对光学元件(无变形)进行建模,外在模型将相机的位置和方向置于空间中。 相机的投影描述如下:
    
     
    • 1

    这里写图片描述

    内部参数:ku和kv通常为1,f表示焦距,cu和cv为主点,表示图像的理想中心。外部参数:R,t分别表示旋转矩阵和平移矩阵。
    
     
    • 1

    OpenMVG针孔相机模型

    Pinhole_Intrinsic : public IntrinsicBase
     
    • 1

    classic pinhole camera (Focal + principal point and image size).焦距、主点与图像大小

    Pinhole_Intrinsic_Radial_K1 : public Pinhole_Intrinsic
     
    • 1

    classic pinhole camera (Focal + principal point and image size) + radial distortion defined by one factor.使用一个因素设置径向畸变。

    Pinhole_Intrinsic_Radial_K3 : public Pinhole_Intrinsic
     
    • 1

    classic pinhole camera (Focal + principal point and image size) + radial distortion by three factors.使用三个因素设置径向畸变。

    Pinhole_Intrinsic_Brown_T2 : public Pinhole_Intrinsic
     
    • 1

    classic pinhole camera (Focal + principal point and image size) + radial distortion by three factors + tangential distortion by two factors.使用三个因素设置径向畸变,使用两个因素设置切向畸变。

    Pinhole_Intrinsic_Fisheye : public Pinhole_Intrinsic
     
    • 1

    classic pinhole camera (Focal + principal point and image size) + fish-eye distortion by four factors.使用四个因素设置鱼眼畸变。

    // Setup a simple pinhole camera at origin
    // Pinhole camera P = K[R|t], t = -RC
    Mat3 K;
    K << 1000, 0, 500,
         0, 1000, 500,
         0, 0, 1;
    PinholeCamera cam(K, Mat3::Identity(), Vec3::Zero());
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    多视角库

    多视角模板主要包括:
    用于在多视图几何中出现的2到n维视图几何约束的求解器的集合。
    一个通用框架“内核”可以嵌入这些求解器进行鲁棒估计。
    列出并解释了第一个可访问的解算程序,并记录了“内核”概念。
    
     
    • 1
    • 2
    • 3
    • 4

    2维求解(2D到2D对应)

    openMVG为以下几何估计提供求解器:
    仿射,同形异义,基本矩阵,7到n pt,8到n pt(直线变换)[HZ]。必要矩阵,8到n pt(直线变换)[HZ],5pt +内在参数[Stewenius],[Nister]。
    
     
    • 1
    • 2

    N-View几何估计

    三角测量,旋转,平移
    
     
    • 1

    单应性矩阵:

    单应性矩阵绘制了一个平面的两个投影之间的关系。H是一个(3×3)矩阵,它将左右图像中的坐标与以下关系联系起来。
    
     
    • 1

    单应性矩阵以及点与点之间的约束
    H可由四对以上的对应点估计出来。

    基本矩阵:

    基本矩阵是观察相同场景的两个图像之间的关系,其中这些点的投影在两个图像中是可见的。 给定两个视图之间的点对应:
    
     
    • 1

    这里写图片描述

    F是(3×3)基本矩阵,它将点x与属于3D X点的投影的线相关联。F有七个自由度,需要至少七个以上的已知对应点关系才能进行计算。
    
     
    • 1

    相对姿态估计(本质矩阵)

    向基本矩阵添加内在参数,得到本质矩阵,该本质矩阵将相机的相对位置与基本矩阵关系相连。
    
     
    • 1

    这里写图片描述

    绝对姿态估计/相机切除(位姿矩阵)

    给定3D-2D点对应的列表,可以计算相机姿态估计。 它包括估计右侧相机的相机参数,使3D点重新投影的残差可以最小化,这是一个优化问题,试图解决P参数,以便最小化:
    
     
    • 1

    这里写图片描述

    openMVG 提供了三种不同的方法来解决这个问题:
    6pt直接线性变换[HZ],
    具有内在EPnP [EPnP]的4pt,
    3pt内在P3P [Kneip]。
    
     
    • 1
    • 2
    • 3
    • 4

    内核概念

    为了在通用的鲁棒估计框架中使用求解器,我们将它们与允许链接的Kernel类结合使用:
    
     
    • 1

    这里写图片描述

    线型规划

    其他内容参见http://openmvg.readthedocs.io/en/latest/

    展开全文
  • OpenMVG+OpenMVS的具体配置过程
  • OpenMVS配置(VS2015)

    千次阅读 2018-02-26 09:26:48
    转载文章,原文章网址openMVG+openMVS+VS2015配置全过程(详细参数设置+截图) 写在最前面,本blog只有文字部分,如果读者需要带有截图的版本请到以下地址下载:...

    转载文章,原文章网址openMVG+openMVS+VS2015配置全过程(详细参数设置+截图)

    写在最前面,本blog只有文字部分,如果读者需要带有截图的版本请到以下地址下载:http://download.csdn.net/detail/mitsubishisony/9614244

    配置之前需要特别注意的地方。

    1)假如你在机器上装了CUDA,那么OpenCV、OpenMVG和OpenMVS中都不要用,要把WITH_CUDA、BUILD_CUDA_LIB、OpenMVS_USE_CUDA之类的取消,因为即使是最新的CUDA7.5也不支持VS2015,目前支持的VS2015的只有CUDA 8.0且还处于RC版本,因此作者也没有尝试其可用性。如果你使用的是VS2013或更早之前版本的VS,可以考虑安装CUDA,并在cmake中勾选相应的选项。。

    2)整个过程中,只有OpenCV,GoogleFlags可以配置成动态库,其余均为静态。即,OpenCV,GoogleFlags中BUILD_SHARED_LIBS需要勾选,其余的出现SHARED_LIB都不能勾选。

    3)VS2015有一个已知bug,在Update1中其实也没有解决,假如你在编译OpenMVS的时候出现了internal error C1001,那么恭喜你,你也碰到了。解决方法[3]是:

    修改Eigen中generalmatrixmatrix.h第144行(Eigen3.2.7是在这一行,其他版本自行定位)

    “–(info[j].users)”改成“info[j].users-=1”。

     

    OPENMVS所需要的所有库,以及本文所使用库的版本

    OpenCV(2.4以上)3.1


    VCG 1.0.0


    CGAL (4.2以上)4.8.1


    Boost 1.61.0


    QT 5.7.0


    LibQGLViewer 2.6.3


    Ceres


    Eigen (3.2以上) 3.2.9


    Google Log 0.3.3


    Google Flags 2.1.2


    CXSParse 3.1.1


    Cmake 3.6.0


     


    OpenMVG


    Git


    GCC (4.7以上)5.4.1


    OpenMVS


     

    文件夹设置:本文在C盘新建一个openMVS的文件夹,其中所需要的各个软件库均以子文件夹的形式在openMVS这个文件夹下进行存储,除此之外在该文件夹下新建2个子文件夹,分别命名为src和build。src文件夹用于存放openMVS的源代码,build用于存放所有相关软件库的生成文件。


    一、配置OpenCV

    1.网上下载的openCV一般为exe格式,如图所示 ,双击运行,设置安装路径为openMVS/openCV下,然后进行安装。安装后会有2个文件夹,一个sources文件夹,一个build文件夹。本文只用sources文件夹

    2.打开cmake软件中的cmake-gui文件,sorce code设置为openCV文件夹里的src子文件夹即openMVS/openCV/sources,build设置为openMVS/build/openCV,详见图,然后点击Configure,并选择相应的编译平台。本文选择Visual Studio 142015 Win64



    3.取消BUILD_WITH_STATIC_CRT、BUILD_PERF_TESTS、BUILD_TESTS以及所有包含CUDA项

    4.勾选BUILD_SHARED_LIBS,然后再点击Configure,之后点击Generate

    5.找到openMVS/build/openCV文件夹中的sln文件,用VS2015打开,分别在Debug和Release模式下进行编译。之后关掉VS2015,在开始菜单中,找到VS2015程序,右键以管理员身份运行,在打开的VS2015的窗口中重新打开刚才的OpenCV.sln文件,在项目列表里找到INSTALL项目,仅对该项目进行编译,并在Debug和Release两种模式下都分别进行编译,如图

    二、Eigen文件直接存储在openMVS/Eigen文件夹下,如图所示

    三、VCG文件也直接存储在openMVS/VCG文件夹下,如图所示


    四、配置Boost

    1.Boost文件下载的时候,注意选择相应的编译平台,32/64位和版本,本文用的1.61.0版本,用于VS2015,64位的安装版本,如图所示 。将Boost文件安装在openMVS/Boost文件夹下,安装后,在安装文件夹下,找到bootstrap.bat文件,双击运行 


    2.完成后,在openMVG\src文件夹内寻找zlib文件夹,复制这个路径
     
    
    打开开始菜单中VS2015文件夹中的VS2015 x64本机工具命令提示符工具,并定位到Boost文件夹内,然后输入bjam stage --with-system --with-thread --with-iostreams --with-program_options --with-serialization --with-date_time -sZLIB_SOURCE=/*openMVG中zlib的文件夹路径*/ address-model=64 link=static runtime-link=shared threading=multi debug release
    其中/*openMVG中zlib的文件夹路径*/替换为上一步复制的zlib文件夹路径,用于本次的话就是
    bjam stage --with-system --with-thread --with-iostreams --with-program_options --with-serialization --with-date_time -sZLIB_SOURCE=C:\openMVS\openMVG\src\third_party\zlib address-model=64 link=static runtime-link=shared threading=multi debug release
    然后按回车运行,如图所示。注意SOURCE=后面不要有空格。
     

    五、QT安装

    安装在c盘默认路径就可以,安装选项默认即可

    把QT的安装路径加入到环境变量path里,针对于本文就是C:\Qt\Qt5.7.0,把这个路径加入到环境变量的path里,如图所示

    六、配置CGAL

    1.首先添加3个环境变量,如图所示

    BOOST_LIBRARYDIR= C:\openMVS\Boost\lib64-msvc-14.0

    BOOST_INCLUDEDIR= C:\openMVS\Boost

    QTDIR= C:\Qt\Qt5.7.0


    2.将以下2个路径添加到环境变量的path里:                                                                                                                                                                                          C:\openMVS\Boost\lib64-msvc-14.0

    C:\Qt\Qt5.7.0\5.7\msvc2015_64\bin


    3.将libQGLViewer文件复制到openMVS/libQGLViewer文件夹内

    打开开始菜单中VS2015文件夹中的VS2015 x64本机工具命令提示符工具,并定位到libQGLViewer/QGLViewer子文件夹下

    4.输入qmake.exe然后回车

    5.输入nmake然后回车

    6.将以下路径添加到环境变量的path中:C:\openMVS\libQGLViewer\QGLViewer


    7.在环境变量中添加以下变量:QGLVIEWERROOT= C:\openMVS\libQGLViewer


    8.安装CGAL文件,如图所示 ,双击进行安装,安装过程中选择64-bits,安装目录到C:\openMVS\CGAL,


    用户选择的地方选择All users,并勾选CGAL_DIR。


    9.根据提示需要把相应的路径添加到环境变量的path中,如下所示



    10.打开cmake-gui,进行如下设置


    11.勾选CGAL_Boost_USE_STATIC_LIBS,取消BUILD_SHARED_LIBS

    然后点Configure,

    12.一般会报错,点击Add Entry添加一个参数 , 如果没有相应的选项,则也通过Add Entry的方式进行添加

    Name:CGAL_Boost_USE_STATIC_LIBS,Type:BOOL,Value:打钩

    Name:BOOST_INCLUDE_DIR,Type:Path,Value:C:\openMVS\Boost\lib64-msvc-14.0。点击OK后,再点击Configure再点Generate



    13.找到openMVS/build/CGAL文件夹中的sln文件,用VS2015打开,分别在Debug和Release模式下进行编译。之后关掉VS2015,在开始菜单中,找到VS2015程序,右键以管理员身份运行,在打开的VS2015的窗口中重新打开刚才的CGAL.sln文件,在项目列表里找到INSTALL项目,仅对该项目进行编译,并在Debug和Release两种模式下都分别进行编译。最后把以下路径添加到环境变量path中:C:\openMVS\build\Cgal\bin


    14.最后将openMVS/CGAL/auxiliary文件夹拷至C:/Program Files/CGAL下,把openMVS/CGAL/auxiliary/gmp/include文件夹下的3个.h文件分别拷到C:\ProgramFiles\CGAL\include\CGAL\GMP和C:\ProgramFiles\CGAL\include\CGAL\internal\auxiliary下。


    七、配置CXSparse

    将文件复制到openMVS/CXSparse文件夹下

    在openMVS\CXSparse\Project\CXSparse文件夹中找到CXSparse.sln文件,双击以VS2015打开,注意把目标平台选为x64,然后分别在Debug和Release模式下进行编译。


    八、配置Ceres

    1.把Ceres,GoogleFlags和Google_Log这3个程序分别复制到openMVS的三个子文件夹里。

    2.打开cmake-gui,然后点Configure,勾选BUILD_SHARED_LIBS,再点generate


    3.找到openMVS/build/Google_Flags文件夹中的sln文件,用VS2015打开,分别在Debug和Release模式下进行编译。之后关掉VS2015,在开始菜单中,找到VS2015程序,右键以管理员身份运行,在打开的VS2015的窗口中重新打开刚才的gflags.sln文件,在项目列表里找到INSTALL项目,仅对该项目进行编译,并在Debug和Release两种模式下都分别进行编译

    4.打开cmake-gui,进行设置然后点Configure,再点generate


    5.找到openMVS/build/Google_Log文件夹中的sln文件,用VS2015打开,分别在Debug和Release模式下进行编译。之后关掉VS2015,在开始菜单中,找到VS2015程序,右键以管理员身份运行,在打开的VS2015的窗口中重新打开刚才的google-glog.sln文件,在项目列表里找到INSTALL项目,仅对该项目进行编译,并在Debug和Release两种模式下都分别进行编译

    6.打开cmake-gui,进行如下设置


    7.一般情况下会报错,修改EIGEN_INCLUDE_DIR为Eigen的根目录,即C:\openMVS\Eigen


    勾选CXSPARSE,EXPORT_BUILD_DIR,MINIGLOG,然后再点Configure

    8.对以下两项进行如下设置:


    再次勾选CXSPARSE,再点Configure,然后点Generate

    9.找到openMVS/build/Ceres文件夹中的sln文件,用VS2015打开,分别在Debug和Release模式下进行编译。之后关掉VS2015,在开始菜单中,找到VS2015程序,右键以管理员身份运行,在打开的VS2015的窗口中重新打开刚才的Ceres.sln文件,在项目列表里找到INSTALL项目,仅对该项目进行编译,并在Debug和Release两种模式下都分别进行编译 

    九、配置openMVG

    1.打开git cmd这个软件,定位到openMVS这个文件夹下 ,然后输入git clone https://github.com/openMVG/openMVG.git,按回车

    2.然后进入openMVG文件夹内,输入git submodule init,按回车 
    3.然后输入git submodule update,按回车 

    4.然后打开cmake-gui程序,进行如下设置


    5.查找是否有Ceres_DIR这个参数,如果有进行修改为C:\Program Files\Ceres\CMake,没有可以通过点击Add Entry添加一个参数

    CERES_DIR=C:\ProgramFiles\Ceres\CMake,点击OK,再Configure


    6.勾选OpenMVG_BUILD_TESTS,OpenMVG_BUILD_EXAMPLES,再次点击Configure,然后点击Generate。

    7.找到openMVS/build/openMVG文件夹中的sln文件,用VS2015打开,分别在Debug和Release模式下进行编译。之后关掉VS2015,在开始菜单中,找到VS2015程序,右键以管理员身份运行,在打开的VS2015的窗口中重新打开刚才的OpenMVG.sln文件,在项目列表里找到INSTALL项目,仅对该项目进行编译,并在Debug模式下进行编译,成功后将C:\Program Files\openMVG下的lib文件夹改成libd,再到Release模式下进行编译

     

    十、配置openMVS

    1.打开cmake-gui,进行设置,然后点Configure,对以下参数进行设置


    2.取消BUILD_STATIC_RUNTIME,OpenMVS_USE_CUDA,然后点Configure,修改如下参数:


    3.然后点击Configure,修改如下参数:


    4.添加以下参数:然后点Configure,再点Generate
     
    

    5.复制以下2个文件到指定位置

    C:\openMVS\CGAL\auxiliary\gmp\include\gmp.h到C:\openMVS\CGAL\include\CGAL

    C:\openMVS\CGAL\auxiliary\gmp\include\mpfr.h到C:\openMVS\CGAL\include

    6.在APP下的5个工程中“连接器-常规-附加库目录”中添加C:\Program Files\CGAL\lib,debug和release都加

    7.ReconstructMesh工程中“链接器-输入-附加依赖项”添加CGAL/auxiliary/gmp/lib/libgmp-10.lib,链接器->常规->附加库目录中添加: C:\openMVS

    8.debug下所有工程在“链接器-输入-附加依赖项”中包含的跟OpenMVG相关的库,都需要把路径中的lib改成libd

    9.设置完之后,推荐一个接一个编译工程,不要使用ALL_BUILD,可能会出现问题。先lib后app。

    10.调整Boost文件:

     在链接器->输入->附加依赖项中涉及到boost的库的文件名前加lib,比如

    C:\openMVS\Boost\stage\lib\boost_system-vc140-mt-gd-1_61.lib修改为

    C:\openMVS\Boost\stage\lib\libboost_system-vc140-mt-gd-1_61.lib

     11.然后依次对APP下的每个项目进行编译,最终再编译ALL_BUILD。然后在开始菜单中,找到VS2015程序,右键以管理员身份运行,在打开的VS2015的窗口中重新打开刚才的CGAL.sln文件,在项目列表里找到INSTALL项目,仅对该项目进行编译,并在Debug和Release两种模式下都分别进行编译

    12.配置opencv路径,在包含目录添加以下路径:C:\openMVS\build\openCV\install\lib

    在库目录添加以下路径:C:\openMVS\build\openCV\install\include

    在附加依赖项里添加以下文件,根据Debug和Release模式添加不同的文件

    Debug:
    opencv_calib3d310d.lib
    opencv_core310d.lib
    opencv_features2d310d.lib
    opencv_flann310d.lib
    opencv_highgui310d.lib
    opencv_imgcodecs310d.lib
    opencv_imgproc310d.lib
    opencv_ml310d.lib
    opencv_objdetect310d.lib
    opencv_photo310d.lib
    opencv_shape310d.lib
    opencv_stitching310d.lib
    opencv_superres310d.lib
    opencv_ts310d.lib
    opencv_video310d.lib
    opencv_videoio310d.lib
    opencv_videostab310d.lib
    Release:
    opencv_calib3d310.lib
    opencv_core310.lib
    opencv_features2d310.lib
    opencv_flann310.lib
    opencv_highgui310.lib
    opencv_imgcodecs310.lib
    opencv_imgproc310.lib
    opencv_ml310.lib
    opencv_objdetect310.lib
    opencv_photo310.lib
    opencv_shape310.lib
    opencv_stitching310.lib
    opencv_superres310.lib
    opencv_ts310.lib
    opencv_video310.lib
    opencv_videoio310.lib
    opencv_videostab310.lib

    13.把以下C:\openMVS\build\openCV\install\bin路径下的所有dll文件复制到C:\Windows\SysWOW64下,或者C:\openMVS\build\openCV\install\bin这个路径添加到环境变量的path中即可

     

     

    展开全文
  • 博客里面涉及的资源,都可在博客里面的链接里下载,如果嫌费劲可以在这里直接下载。配置过程需要下载的都包含了。https://blog.csdn.net/qq_38185927/article/details/105957517
  • linux OPENMVG+OPENMVS配置踩过的那些坑

    千次阅读 2018-09-26 20:31:43
    刚开始在实验室的工作站上配置环境 配的我一头包 幸好老板发了新电脑,在新电脑上配,啥东西都是自己安的,省事...2.OPENMVS要注意第三行代码main_path=‘pwd’,这里的main_path是你vcglib文件夹所在目录文件,因此...
  • 最近开始在做基于二维图像的三维重建项目,OpenMVG和OpenMVS可谓是必不可少的两个库,但网上配置及学习资料太少,花了整整一个月的时间才将库配置好,过程可谓艰难。本人也是入门级,此贴的目的在于将自己的经验分享...

空空如也

空空如也

1 2 3 4 5 6
收藏数 119
精华内容 47
关键字:

openmvs配置