Open3D:Win10 + VS2017配置Open3D(C++、python)

2023-11-08

累了就要打游戏 2020-08-25 15:13:10  3350  收藏 25
分类专栏: # Open3D 文章标签: 点云 Open3D C++
版权

Open3D
专栏收录该内容
5 篇文章1 订阅
订阅专栏
20200825:今天七夕,呱呱呱

Open3D是一个支持三维数据处理的开源库,支持C ++和Python。后端经过高度优化,并设置为并行化。MIT协议。

官网:http://www.open3d.org/

GitHub: https://github.com/intel-isl/Open3D

python版本安装方便:pip install open3d  或者

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple open3d
下面介绍C++版本的配置(相比于一行python代码,C++真是牛逼)

一、下载源码
GitHub地址:https://github.com/intel-isl/Open3D

1.1 克隆源码【笔者的源码路径为 D:/Open3D/Open3D】

1.2 切换版本【笔者用过的版本为 v0.8.0 和 v0.10.0】

1.3 更新子模块【用于获取第三方库!很重要!】

注意:v0.8.0更新的时候没有报错;但是v0.10.0更新的时候失败了【抱着试试的心态继续进行,后续没出错,感觉是我 git 用的还不熟练的原因吧】

结果如下:

二、CMake编译
2.1 设置路径

【source code: D:/Open3D/Open3D; build binaries: D:/Open3D】

【笔者设置 CMAKE/CMAKE_INSTALL_PREFIX 的路径为 D:/Open3D/install】

2.2 generator选择 Visual Studio 15 2017【官方建议 VS2019及以上】,optional platform for generator 选择x64

2.3 Configure -> Configure done

2.4 Generate -> Generating done

三、生成解决方案
3.1 打开

VS2017打开 D:/Open3D/Open3D.sln【官方建议 VS2019及以上】Release-x64

3.2 将CMakePredefinedTargets/ALL_BUILD设为启动项,右击生成

【v0.8.0版本报错了:...\VS2017\IDE\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(209,5): error MSB6006: “cmd.exe”已退出,代码为 9009。后续没报错,所以貌似好像应该可能大概 没啥影响吧】

【v0.10.0版本没有报错:成功61个】

3.3 打包包

右击 CMakePredefinedTargets/INSTALL,仅用于项目 -> 仅生成INSTALL;

在 D:/Open3D/install 中会生成CMake文件、头文件、静态库,如下图

四、测试
官方参考:http://www.open3d.org/docs/release/cpp_project.html#create-cplusplus-project【very nice】

4.1 下载测试文件

下载TestVisualizer.cpp和 CMakeLists.txt到 F:/testVisualizer【路径随便改,高兴就行】

4.2 修改TestVisualizer.cpp,完整代码如下:

#include <iostream>
#include <memory>
#include <thread>
 
#include <Open3D/Open3D.h>
 
// A simplified version of examples/Cpp/Visualizer.cpp to demonstrate linking
// an external project to Open3D.
int main(int argc, char *argv[])
{
    /* add by lljydyx */
    argc = 4;
    argv[1] = "pointcloud";
    argv[2] = "F:/rabbit.pcd";
 
 
    using namespace open3d;
 
    utility::SetVerbosityLevel(utility::VerbosityLevel::Debug);
    if (argc < 3)
    {
        utility::LogInfo("Open3D {}\n", OPEN3D_VERSION);
        utility::LogInfo("\n");
        utility::LogInfo("Usage:\n");
        utility::LogInfo("    > TestVisualizer [mesh|pointcloud] [filename]\n");
        // CI will execute this file without input files, return 0 to pass
        return 0;
    }
 
    std::string option(argv[1]);
    if (option == "mesh")
    {
        auto mesh_ptr = std::make_shared<geometry::TriangleMesh>();
        if (io::ReadTriangleMesh(argv[2], *mesh_ptr)) {
            utility::LogInfo("Successfully read {}\n", argv[2]);
        } else {
            utility::LogWarning("Failed to read {}\n\n", argv[2]);
            return 1;
        }
        mesh_ptr->ComputeVertexNormals();
        visualization::DrawGeometries({mesh_ptr}, "Mesh", 1600, 900);
    }
    else if (option == "pointcloud")
    {
        auto cloud_ptr = std::make_shared<geometry::PointCloud>();
        if (io::ReadPointCloud(argv[2], *cloud_ptr))
        {
            utility::LogInfo("Successfully read {}\n", argv[2]);
        }
        else
        {
            utility::LogWarning("Failed to read {}\n\n", argv[2]);
            return 1;
        }
        cloud_ptr->NormalizeNormals();
        visualization::DrawGeometries({cloud_ptr}, "PointCloud", 1600, 900);
    }
    else
    {
        utility::LogWarning("Unrecognized option: {}\n", option);
        return 1;
    }
    utility::LogInfo("End of the test.\n");
 
    return 0;
}
CMakeList.txt 如下:

cmake_minimum_required(VERSION 3.1)
set (CMAKE_CXX_STANDARD 14)
 
project(TestVisualizer)
 
# Find installed Open3D, this imports
#   Open3D_INCLUDE_DIRS
#   Open3D_LIBRARIES
#   Open3D_LIBRARY_DIRS
#   Open3D_C_FLAGS
#   Open3D_CXX_FLAGS
#   Open3D_EXE_LINKER_FLAGS
if(WIN32)
    find_package(Open3D HINTS ${CMAKE_INSTALL_PREFIX}/CMake)
else()
    find_package(Open3D HINTS ${CMAKE_INSTALL_PREFIX}/lib/CMake)
    list(APPEND Open3D_LIBRARIES dl)
endif()
 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${Open3D_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Open3D_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${Open3D_EXE_LINKER_FLAGS}")
 
# Set OS-specific things here
if(WIN32)
    if (ENABLE_GUI)
        set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /FORCE:MULTIPLE")
        # Filament is built with /MT[d], but by default CMake automatically
        # sets "/MD" and "/MDd". They can't coexist, so we need to replace them.
        string(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})
        string(REPLACE "/MDd" "/MTd" CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG})
        string(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
        string(REPLACE "/MDd" "/MTd" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
    endif()
elseif(CYGWIN)
elseif(APPLE)
elseif(UNIX)
    add_definitions(-DUNIX)
    add_compile_options(-Wno-deprecated-declarations)
    add_compile_options(-Wno-unused-result)
    add_definitions(-O3)
endif(WIN32)
 
# Open3D
if (Open3D_FOUND)
    message(STATUS "Found Open3D ${Open3D_VERSION}")
 
    # link_directories must be before add_executable
    link_directories(${Open3D_LIBRARY_DIRS})
 
    add_executable(TestVisualizer TestVisualizer.cpp)
 
    target_link_libraries(TestVisualizer ${Open3D_LIBRARIES})
 
    target_include_directories(TestVisualizer PUBLIC ${Open3D_INCLUDE_DIRS})
 
    # Hot fix windows dll not found issue, assumming we're using the Release build
    option(BUILD_SHARED_LIBS "Whether Open3D was build as shared library" OFF)
    if(WIN32 AND BUILD_SHARED_LIBS)
        message("Will copy Open3D.dll to ${CMAKE_CURRENT_BINARY_DIR}/Release")
        add_custom_command(TARGET TestVisualizer POST_BUILD
                        COMMAND ${CMAKE_COMMAND} -E copy
                                ${CMAKE_INSTALL_PREFIX}/bin/Open3D.dll
                                ${CMAKE_CURRENT_BINARY_DIR}/Release)
    endif()
    if(WIN32 AND ENABLE_GUI)
        message("Will copy SDL2.dll to ${CMAKE_CURRENT_BINARY_DIR}/Release")
        add_custom_command(TARGET TestVisualizer POST_BUILD
                        COMMAND ${CMAKE_COMMAND} -E copy
                                ${CMAKE_INSTALL_PREFIX}/lib/SDL2.dll
                                ${CMAKE_CURRENT_BINARY_DIR}/Release)
    endif()
 
else ()
    message(SEND_ERROR "Open3D not found")
endif ()
4.3 按照官方参考进行 CMake 编译【笔者的Open3D_DIR路径为 D:/Open3D/install/CMake 】

4.4 Configure -> Configure done

4.5 Generate -> Generating done

 五、运行
VS2017打开 F:\testVisualizer\build\TestVisualizer.sln,Release-x64

将ALL_BUILD设置为启动项,右击生成。

将TestVisualizer设置为启动项,运行结果如下


————————————————
版权声明:本文为CSDN博主「累了就要打游戏」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xinjiang666/article/details/108208133

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Open3D:Win10 + VS2017配置Open3D(C++、python) 的相关文章

  • flex-wrap 后内容高度被撑开

    问题 布局时出现换行后 高度异常 box height calc 100vh 100px background fff overflow auto padding 76px 0 0 17px display flex flex wrap w

随机推荐

  • MySQL中的锁

    数据库中的锁 锁分类 按锁的粒度划分 表级锁 行级锁 页级锁 按锁级别划分 共享锁 排它锁 意向锁 按加锁方式划分 自动锁 显示锁 按使用方式划分 乐观锁 悲观锁 MySQL中的行级锁 表级锁和页级锁 行级锁 行级锁分为共享锁和排他锁 行级
  • 经典小题目2(进制转换,递归真是个好东西啊!C语言)

    递归真是个好东西 进制转换 十进制 gt R进制 除基取余 倒序排列 1 十进制转二进制 十进制转二进制 void convert1 int n if n 0 return else convert1 n 2 printf d n 2 2
  • 【AI面试】CrossEntropy Loss 、Balanced Cross Entropy、 Dice Loss 和 Focal Loss 分类损失横评

    在实际任务中 数据的不均衡一直是深度学习领域一个不可忽略的问题 常说的长尾效应 说的就是这个问题 少而多的误差 最终造成的结果 是不容忽视的 长尾效应 在正态分布中 曲线中间凸起的是 头 两边相对平缓的部分叫做 尾 对于绝大部分的需求来说
  • 测试工程师面试之设计测试用例

    以下的问题答案 仅供参考 如小伙伴们有更好的答案 欢迎大家评论区留言 谢谢大家 测试工程师面试之设计测试用例 1 请说一说简单用户界面登陆过程都需要做哪些分析 2 请对此系统设计测试用例 一个系统 多个摄像头 抓拍车牌 识别车牌 上传网上
  • 【基于Proteus 8 Professional和Keil uVision5简单共阴极数码管点亮】

    1 前面的一些Keil uVision5环境搭建具体的操作我已经省略 可以参照我前面写的博客 2 Main c代码 include stm32f10x h uint16 t table 0x3f 0x06 0x5b 0x4f 0x66 0x
  • 模拟电路设计(13)--- 振荡器电路原理简介

    概述 所谓振荡器电路就是一种在没有外界输入信号的情况下能自行产生周期性交变信号输出的电子电路 可以作为信号源 定时源 能量变换电路 频谱变换电路等等 普遍应用于通信电子系统 振荡器的种类很多 按原理分 反馈振荡器和负阻振荡器 按输出频率分
  • JavaBean转有序的Json字符串

    前言 随着国密算法普及 接口json加签传输对字段顺序有要求 处理代码 public static void main String args throws IllegalAccessException User user new User
  • chatgpt配合xmind制作思维导图

    原理 xmind支持将markdown文件转化成思维导图的形式 提示词 我将提供以下文章 请帮我使用Xmind工具创建一个 的思维导图 其中包含多个主题和子主题 以及叶子节点 请你提供一些Markdown格式的文本 以便与Xmind兼容 在
  • Oracle监控的关键指标(一)

    先收集一些Oracle的关键指标 最近有空的话再考虑将一些比较有代表性的监控点进行指标化 指标化的数据在通过python脚本对进行性能上监控 最终部署在目前维护的oracle数据库上 0 找使用CPU多的用户session select a
  • WSL安装教程

    wsl安装教程 引言 前期准备工作 安装wsl 第一步 第二步 检测系统版本 第三步 确定虚拟机特性 第四步 下载Linux内核的更新包 第五步 设置WSL 2作为默认版本 第六步 选择Linux发行版本并设置Linux账号 小TIPS 引
  • CocoaPods导入第三方库,提示找不到头文件的解决方法

    最近一直在了解MVVM架构模式 也知道了ReactiveCocoa框架对MVVM实现的便利与优雅 但是CocoaPods导入ReactiveCocoa框架后 却出现一个问题 就是引入头文件的时候说找不到头文件 如下图 解决方法如下 1 找到
  • Fragment详解

    Fragment有自己的生命周期 Fragment依赖于Activity Fragment通过getActivity 可以获取所在的Activity Activity通过FragmentManager的findFragmentById 或f
  • QT5.15以及QT VS TOOL安装教程

    QT5 15以及QT VS TOOL安装教程 1 QT5 15下载安装教程 点击这个链接 https download qt io 在official release online installers目录下选择exe文件下载windows
  • vue重新进页面重新加载mounted或者created中的内容

    vue的项目中 如果再次进入当前页面需要重新加载mounted方法可以使用 activated 这个方法内就可以执行需要进入页面重新加载的方法来替代mounted或者created方法 这样就可以满足不重新加载页面就可以直接将方法重新执行一
  • 打印机错误0x00000bc4的解决办法

    共享打印机在使用过程中难免会出现一些问题 比如连接共享打印机错误 提示代码0x00000bc4 这该如何解决 共享打印机出现问题是件非常麻烦的事 下面就来看看小编整理的解决办法吧 Win11连接共享打印机错误0x00000bc4解决方法 1
  • RabbitMQ:work结构

    gt 只需要在消费者端 添加Qos能力以及更改为手动ack即可让消费者 根据自己的能力去消费指定的消息 而不是默认情况下由RabbitMQ平均分配了 生产者不变 正常发布消息到默认的exchange gt 消费者指定Qoa和手动ack 生产
  • 2023Web前端面试题及答案(一)

    答案仅供参考 每人的理解不一样 文章目录 1 简单说一说事件流原理 事件流 1 事件流是指页面 接收事件的顺序 2 假设页面中的元素都具备相同的事件 并且这些个元素之间是相互嵌套的 关系 3 那么在触发一个元素的事件时候 会触发其他的元素
  • 华为od机考真题-HJ105-记负均正II(较难)

    非负数缓存 data lst 负数个数 count 0 while 1 try data int input if data gt 0 data lst append
  • 卷积核大小不一样的卷积

    这种不是33而是51的 参考这个https blog csdn net qq 37541097 article details 102926037 也就是说把中间写成 3 5 就可以了
  • Open3D:Win10 + VS2017配置Open3D(C++、python)

    累了就要打游戏 2020 08 25 15 13 10 3350 收藏 25 分类专栏 Open3D 文章标签 点云 Open3D C 版权 Open3D 专栏收录该内容 5 篇文章1 订阅 订阅专栏 20200825 今天七夕 呱呱呱 O