国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Open3D-GUI系列教程(一)創(chuàng)建一個(gè)Open3D應(yīng)用窗口

這篇具有很好參考價(jià)值的文章主要介紹了Open3D-GUI系列教程(一)創(chuàng)建一個(gè)Open3D應(yīng)用窗口。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

本人菜狗一枚,第一次寫文章,python懂的也不多,肯定有很多表述存在問題,如有錯(cuò)誤請大佬們不吝賜教。

整個(gè)open3d的gui我是照著源碼里的示例和官方文檔摸出來的,因?yàn)榇_實(shí)很少有關(guān)于這個(gè)的教程,官方也沒給。所以我順便整理分享一下。

Open3D官網(wǎng)

官方文檔

open3d版本:0.14.1


Open3D安裝:

閑話少說,直接開整。

Pip

pip install open3d

Conda

conda install -c open3d-admin -c conda-forge open3d

第一個(gè)Open3D窗口

Open3d提供了很多種可視化方案,同時(shí)也提供了一個(gè)open3d.visualization.gui模塊和open3d.visualization.rendering模塊用來快速構(gòu)建小應(yīng)用。

1. 導(dǎo)入相應(yīng)模塊

import open3d as o3d
import open3d.visualization.gui as gui
import open3d.visualization.rendering as rendering
  • o3d提供所有的Open3d模塊,包括常用的模型加載(o3d.io),幾何和數(shù)據(jù)結(jié)構(gòu)(o3d.geometry)等。

  • gui提供了應(yīng)用的全局實(shí)例(gui.Application.instance),和全部可用的控件。

  • rendering提供了場景模型渲染的相關(guān)部分。

2. 初始化應(yīng)用實(shí)例并創(chuàng)建窗口

我們定義一個(gè)應(yīng)用類,用來創(chuàng)建界面,界面布局和相應(yīng)事件等設(shè)置都應(yīng)該在__init__中完成。

class App:
    def __init__(self):
        # 初始化實(shí)例
       	gui.Application.instance.initialize()	
        
        # 創(chuàng)建主窗口
        self.window = gui.Application.instance.create_window('My First Window', 800, 600)
        
        # 創(chuàng)建顯示場景
        self.scene = gui.SceneWidget()
        self.scene.scene = rendering.Open3DScene(self.window.renderer)
        
        # 將場景添加到窗口中
        self.window.add_child(self.scene)
        
        # 創(chuàng)建一個(gè)球
        sphere = o3d.geometry.TriangleMesh.create_sphere()
        sphere.paint_uniform_color([0.0, 1.0, 1.0])
        sphere.compute_vertex_normals()
        material = rendering.MaterialRecord()
        material.shader = 'defaultLit'
        
        # 將球加入場景中渲染
        self.scene.scene.add_geometry("Sphere", sphere, material)
        
        # 設(shè)置相機(jī)屬性
        bounds = sphere.get_axis_aligned_bounding_box()
        self.scene.setup_camera(60, bounds, bounds.get_center())
	
    def run(self):
        gui.Application.instance.run()

if __name__ == "__main__":
    app = App()
    app.run()

2.1 初始化

當(dāng)我們想要使用gui模塊創(chuàng)建一個(gè)應(yīng)用程序時(shí),在使用任何控件之前,必須先初始化全局應(yīng)用單例gui.Application.instance

gui.Application.instance.initialize()	

初始化有兩種方式,其中的一種必須首先被調(diào)用。

  1. initialize(self: gui.Application) -> None
    • 使用默認(rèn)的資源初始化。
  2. initialize(self: gui.Application, arg0: str) -> None
    • arg0是資源文件路徑(resources),用該資源初始化。

2.2 創(chuàng)建窗口

當(dāng)應(yīng)用初始化后,我們就可以通過全局應(yīng)用單例創(chuàng)建窗口了,我們將窗口命名為”My First Window“。

 self.window = gui.Application.instance.create_window('My First Window', 800, 600)

該函數(shù)原型是:

create_window(self: open3d.cpu.pybind.visualization.gui.Application, title: str = ‘’, width: int = - 1, height: int = - 1, x: int = - 1, y: int = - 1, flags: int = 0) → open3d::visualization::gui::PyWindow

  • title是應(yīng)用窗口名稱,即左上角的title。
  • width和height是窗口大小。
  • x, y和flag是可選的。(我也不曉得是啥)

該函數(shù)返回一個(gè)應(yīng)用窗口。

2.3 添加場景

有了窗口之后,我們可以向窗口里添加一個(gè)組件gui.SceneWidget,這個(gè)控件是用來展示3D模型的場景。

 self.scene = gui.SceneWidget()
 self.scene.scene = rendering.Open3DScene(self.window.renderer)

gui.SceneWidget()返回一個(gè)空的組件,所以我們必須為組件添加一個(gè)渲染器。這個(gè)渲染器可以直接用主窗口的渲染器(即self.window.renderer)來初始化。

之后,我們將創(chuàng)建的控件作為主窗口的子控件添加到應(yīng)用中。通過調(diào)用窗口的add_child()完成。

 self.window.add_child(self.scene)

2.4 添加模型

在之前的步驟中,我們創(chuàng)建了一個(gè)空的場景,我們可以向場景中添加不同的模型進(jìn)行渲染。每個(gè)模型都有一個(gè)對應(yīng)的材質(zhì)(Material),用來決定模型的顏色、紋理、著色模型、光照等。

這里我們創(chuàng)建一個(gè)在圓心在原點(diǎn)(0,0,0)的球和對應(yīng)材質(zhì)。

material.shader= 'defaultLit'表示使用默認(rèn)的光照模型進(jìn)行著色。由于光照模型需要法向量信息,所以我們需要計(jì)算球頂點(diǎn)的法向量。

sphere = o3d.geometry.TriangleMesh.create_sphere()
sphere.paint_uniform_color([0.0, 1.0, 1.0])
sphere.compute_vertex_normals()
material = rendering.Material()
material.shader = 'defaultLit'

準(zhǔn)備好模型就可以將其添加到場景中了。

 self.scene.scene.add_geometry("Sphere", sphere, material)
  • 第一個(gè)參數(shù)是模型的名字,之后可以用這個(gè)唯一的名字操作相應(yīng)的模型(如隱藏該模型)。
  • 第二個(gè)參數(shù)是模型,類型是o3d.geometry.Geometry3Do3d.geometry.Geometry,
  • 第三個(gè)參數(shù)是模型材質(zhì)。

2.5 相機(jī)屬性

場景中有了模型,我們需要設(shè)置相機(jī)來觀察模型。

bounds = sphere.get_axis_aligned_bounding_box()
self.scene.setup_camera(60, bounds, bounds.get_center())

設(shè)置場景的相機(jī)通過setup_camera()實(shí)現(xiàn),其原型之一如下:

setup_camera(field_of_view, model_bounds, center_of_rotation)

  • 第一個(gè)參數(shù)決定視野范圍FOV;
  • 第二個(gè)參數(shù)是模型的包圍盒,可以通過get_axis_aligned_bounding_box來獲得;
  • 第三個(gè)參數(shù)是攝像機(jī)的旋轉(zhuǎn)中心;

2.6 循環(huán)事件

此時(shí)我們已經(jīng)創(chuàng)建好了窗口,添加了模型,要讓應(yīng)用開始運(yùn)行,只需要讓全局單例跑起來。

gui.Application.instance.run()

這樣應(yīng)用就會(huì)一直運(yùn)行直到關(guān)閉,而不會(huì)閃一下就結(jié)束。

3.運(yùn)行結(jié)果

運(yùn)行這個(gè)程序,你將會(huì)得到一個(gè)可以旋轉(zhuǎn)的青色球。

Open3D-GUI系列教程(一)創(chuàng)建一個(gè)Open3D應(yīng)用窗口文章來源地址http://www.zghlxwxcb.cn/news/detail-411964.html

到了這里,關(guān)于Open3D-GUI系列教程(一)創(chuàng)建一個(gè)Open3D應(yīng)用窗口的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Open3D點(diǎn)云數(shù)據(jù)處理(一):VSCode配置python,并安裝open3d教程

    Open3D點(diǎn)云數(shù)據(jù)處理(一):VSCode配置python,并安裝open3d教程

    專欄地址:https://blog.csdn.net/weixin_46098577/category_11392993.html 在很久很久以前,我寫過這么一篇博客,講的是open3d點(diǎn)云處理的基本方法。?? 當(dāng)時(shí)是 PyCharm + Anaconda + python3.8 + open3d 0.13 已經(jīng)是2023年了,現(xiàn)在有了全新版本。目前python由當(dāng)年的3.8更新到了3.11版本,open3d也從0.13來到了

    2024年02月07日
    瀏覽(37)
  • 【Open3D 實(shí)現(xiàn)點(diǎn)云拼接】——將兩個(gè)點(diǎn)云合并成一個(gè)

    【Open3D 實(shí)現(xiàn)點(diǎn)云拼接】——將兩個(gè)點(diǎn)云合并成一個(gè) 點(diǎn)云拼接是三維重建和場景重建中的重要一步,如何高效、準(zhǔn)確地將兩個(gè)點(diǎn)云進(jìn)行拼接是一個(gè)挑戰(zhàn)。Open3D是一個(gè)專業(yè)的開源庫,提供了豐富的三維算法和工具,其中支持點(diǎn)云的讀取、處理和可視化。本文將介紹如何使用Open

    2024年02月13日
    瀏覽(22)
  • open3d學(xué)習(xí)教程1--點(diǎn)云對象PointCloud

    open3d學(xué)習(xí)教程1--點(diǎn)云對象PointCloud

    點(diǎn)云簡單來說就是3d坐標(biāo)下一個(gè)個(gè)點(diǎn)組成的數(shù)據(jù),每個(gè)點(diǎn)可以包含x,y,z,顏色、分類值、強(qiáng)度值、時(shí)間等等信息。點(diǎn)云是3d數(shù)據(jù)的表示形式之一。 open3d中用來表示點(diǎn)云的數(shù)據(jù)結(jié)構(gòu)。pointcloud對象包含了很多處理點(diǎn)云的成員方法,如點(diǎn)云體素下采樣,點(diǎn)云上色等等。 pointcloud的靜態(tài)

    2023年04月08日
    瀏覽(17)
  • 基于Python的Open3D庫進(jìn)行點(diǎn)云聚類(詳細(xì)教程)

    基于Python的Open3D庫進(jìn)行點(diǎn)云聚類(詳細(xì)教程) 隨著3D技術(shù)的不斷發(fā)展,點(diǎn)云處理已成為越來越重要的研究領(lǐng)域之一。而點(diǎn)云聚類作為其中的一個(gè)熱門問題,已經(jīng)成為廣大3D技術(shù)工作者必須掌握的技能之一。本文將介紹如何使用Python中的Open3D庫實(shí)現(xiàn)點(diǎn)云聚類,并給出詳細(xì)的代碼

    2024年02月09日
    瀏覽(26)
  • 【點(diǎn)云處理教程】00計(jì)算機(jī)視覺的Open3D簡介

    【點(diǎn)云處理教程】00計(jì)算機(jī)視覺的Open3D簡介

    ????????Open3D 是一個(gè)開源庫,使開發(fā)人員能夠處理 3D 數(shù)據(jù)。它提供了一組用于 3D 數(shù)據(jù)處理、可視化和機(jī)器學(xué)習(xí)任務(wù)的工具。該庫支持各種數(shù)據(jù)格式,例如 .ply、.obj、.stl 和 .xyz,并允許用戶創(chuàng)建自定義數(shù)據(jù)結(jié)構(gòu)并在程序中訪問它們。 Open3D 廣泛應(yīng)用于機(jī)器人、增強(qiáng)現(xiàn)實(shí)和自

    2024年02月14日
    瀏覽(19)
  • open3d教程(二):可視化三維模型,并轉(zhuǎn)換成點(diǎn)云(Python版本)

    open3d教程(二):可視化三維模型,并轉(zhuǎn)換成點(diǎn)云(Python版本)

    可以自己用建模軟件建立一個(gè)模型 從free3d免費(fèi)下載 open3d.visualization. draw_geometries 參數(shù): geometry_list ( List[open3d.geometry.Geometry]) : 要可視化的幾何體列表. window_name( str ,? optional ,? default=\\\'Open3D\\\'): 展示模型的可視化窗口名稱,默認(rèn)是Open3d. width:?

    2024年02月11日
    瀏覽(27)
  • python如何實(shí)現(xiàn)點(diǎn)云可視化交互——Open3D實(shí)例教程(獲取所選點(diǎn)的信息)保姆級(jí)教學(xué)

    python如何實(shí)現(xiàn)點(diǎn)云可視化交互——Open3D實(shí)例教程(獲取所選點(diǎn)的信息)保姆級(jí)教學(xué)

    Open3D是目前python中可用的用于 3D 數(shù)據(jù)處理的現(xiàn)代庫,可以對點(diǎn)云、網(wǎng)格等三維數(shù)據(jù)進(jìn)行讀取、采樣、配準(zhǔn)、可視化等操作。其中對點(diǎn)云等三維模型進(jìn)行可視化的功能在Python中顯得非常方便。 在通過對官方文檔的研究之后作者發(fā)現(xiàn)在Open3D的多種可視化函數(shù)中出現(xiàn)了返回所選點(diǎn)

    2024年02月02日
    瀏覽(41)
  • Pytorch1.7復(fù)現(xiàn)PointNet++點(diǎn)云分割(含Open3D可視化)(文末有一個(gè)自己做的書縫識(shí)別項(xiàng)目代碼)

    Pytorch1.7復(fù)現(xiàn)PointNet++點(diǎn)云分割(含Open3D可視化)(文末有一個(gè)自己做的書縫識(shí)別項(xiàng)目代碼)

    ??畢設(shè)需要,復(fù)現(xiàn)一下PointNet++的對象分類、零件分割和場景分割,找點(diǎn)靈感和思路,做個(gè)踩坑記錄。 https://github.com/yanx27/Pointnet_Pointnet2_pytorch ??我的運(yùn)行環(huán)境是pytorch1.7+cuda11.0。 ??PointNet++代碼能實(shí)現(xiàn)3D對象分類、對象零件分割和語義場景分割。 對象分類 ??下載數(shù)據(jù)

    2023年04月15日
    瀏覽(27)
  • 【Open3D】如何在CMake/C++中調(diào)用Open3D

    qquad Open3D是點(diǎn)云的開源處理庫,支持Python或C++。其Python已有較全的教程,也可以直接使用 pip install open3d 直接進(jìn)行安裝,而若想在C++中調(diào)用Open3D則麻煩一些,需要滿足以下條件: Open3D git源代碼(本教程針對0.16.1的版本) CMake = 3.20 clang = 7 分為以下幾步進(jìn)行: 下載Open3D源代碼

    2023年04月18日
    瀏覽(14)
  • 基于Open3D的點(diǎn)云處理17-Open3d的C++版本

    基于Open3D的點(diǎn)云處理17-Open3d的C++版本

    http://www.open3d.org/docs/latest/cpp_api.html http://www.open3d.org/docs/latest/getting_started.html#c http://www.open3d.org/docs/release/cpp_project.html#cplusplus-example-project https://github.com/isl-org/open3d-cmake-find-package https://github.com/isl-org/open3d-cmake-external-project https://github.com/isl-org/Open3D/releases Note: -DBUILD_SHARED_LIBS

    2024年02月09日
    瀏覽(47)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包