(十三)Visualization教程一

2021-07-30 03:09:55 字數 3220 閱讀 5445

如果你只是想簡單的顯示一幅點雲,那麼cloudviewer會是乙個不錯的選擇。

注意cloudviewer類不能用在多執行緒

#include
pcl::pointcloud::ptr cloud;

//... populate cloud

pcl::visualization::cloudviewer viewer ("****** cloud viewer");

viewer.showcloud (cloud);

while (!viewer.wasstopped ())

pclvisualizer類包含了pcl用於視覺化的所有功能。雖然比cloudviewer使用起來更加困難,但是功能也更加強大,比如顯示法線,繪製三維圖形,多視窗檢視等。

我們先從最基本的功能–顯示乙個點雲開始我們的教程:

初始化pclvisualizer

pcl::visualization

::pclvisualizer viewer("viewer_1");

viewer_1為顯示視窗標題欄上的名稱。

向pclvisualizer載入點雲

viewer.addpointcloud(cloudin.makeshared(), "cloud1");
因為在視窗中我們可以依次載入多個不同的點雲,為了以後分別對這些點雲進行操作,我們在載入點雲的時候給它乙個唯一的id識別符號,比如這裡的「cloud1」。

迴圈顯示

// 迴圈顯示

viewer.spin();

至此,我們可以簡單的顯示乙個點雲了,但是為了在視覺化視窗顯示出更多的資訊,對點雲進行更多的操作,我們還要進一步探索

初始化乙個pointcloudcolorhandlercustom類,初始化引數分別是:要上顏色的點雲,r,g,b。

// 給點雲附上顏色

pcl::visualization

::pointcloudcolorhandlercustom

<:pointxyz>

> single_color(cloudin.makeshared(), 255, 0, 0);

載入點雲時,以引數的將初始化了的pointcloudcolorhandlercustom類帶入

// 載入乙個點雲

viewer.addpointcloud(cloudin.makeshared(),single_color, "cloud1");

pcl中的渲染屬性分為以下幾種

enum

renderingproperties

;

設定某乙個渲染屬性:

viewer.setpointcloudrenderingproperties(pcl::visualization

::pcl_visualizer_point_size, 2,"cloud1");

注意,引數裡面要選擇乙個點雲id,表明是對哪個點雲進行屬性修改

視覺化視窗為我們模擬了人的眼睛,這個「眼睛」又是可以通過設定改變其引數的,我們通過設定不同的引數,在這個視窗中可以有不一樣的感受。

pcl自帶了許多簡單的3d圖形,比如3d文字,直線,平面,球,圓錐,座標軸等。這可以被用來顯示點雲處理後的結果,比如,我們可以畫出乙個透明的球體,然後看下點雲中哪些點應該屬於這個球。

這裡就只舉乙個直線的例子,其他都大同小易:

// 新增直線

viewer.addline(pcl::pointxyz(0, 0, 0), pcl::pointxyz(1, 1, 1));

// 設定背景

viewer.setbackgroundcolor(0, 1, 0);

初始化相機引數
// 初始化相機引數

viewer.initcameraparameters();

獲取相機列表
// 獲取相機列表

std::vector

camera;

viewer.getcameras(camera);

設定相機fov
// 設定相機fov

viewer.setcamerafieldofview(0.785398); // fov 大概45度

設定相機位置
viewer.setcameraposition(

0, 0, 5, // camera位置

0, 0, 4, // view向量--相機朝向

0, 1, 5

// up向量

);

設定相機引數
viewer

.setcameraparameters(camera

[0]);

// 多視窗

int v1 = 0;

viewer.createviewport(0.0, 0.0, 0.5, 1.0, v1);

int v2 = 1;

viewer.createviewport(0.5, 0.0, 1.0, 1.0, v2);

事件函式

void keyboardeventoccurred(const pcl::visualization::keyboardevent &event,

void* viewer_void)

text_id = 0;}}

註冊事件

// 互動

viewer.registerkeyboardcallback(keyboardeventoccurred);

第十三課 彙編基礎學習 十三

請注意 該動畫內如含廣告與本站無任何關係,為作者個人宣傳,網路交易風險自負 and指令 且 and 邏輯與指令,按位進行與運算。必須兩個運算元都為1,那麼返回為1。有乙個為0,則返回為0 示例 mov al,00001000b and al,11110111b 執行後al 0 00001000b 8...

學習Python 十三

import signal define signal handler function def myhandler signum,frame print i received signum register signal.sigtstp s handler signal.signal signal...

十三 工作模式

1.請出大幫手 arm指令手冊 2.有七種工作模式,為的是形成不同的使用級別,以防造成對系統的破壞。不同模式可以訪問的暫存器不同,可以執行的指令不同。3.1 usr 普通應用程式執行的模式 應用程式 2 fiq 快速中斷模式,以處理快速情況,高速資料傳輸 3 irq 外部中斷模式,普通中斷處理 4 ...