如果你只是想簡單的顯示一幅點雲,那麼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 ...