版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第4章 輸入、輸出(IO),,PCL中所有的處理都是基于點云展開的,利用不同的設(shè)備獲取點云、存儲點云等都是點云處理前后必須做的流程,PCL中有自己設(shè)計的內(nèi)部PCD文件格式,為此,設(shè)計讀寫該格式以及與其他3D文件格式之間進(jìn)行轉(zhuǎn)化的接口類都是很必要的,目前PCL內(nèi)部支持對常用的3D格式文件的打開和存儲操作,以及與PCD內(nèi)部格式之間的互相轉(zhuǎn)化。本章首先對PCL中支持的點云獲取設(shè)備(如kinect)以及OpenNI開源框架作一個基本介紹,其次
2、對PCL中的I/O模塊及相關(guān)類進(jìn)行簡單說明,最后通過應(yīng)用實例來展示如何對PCL中I/O模塊進(jìn)行靈活運用。,本章各小節(jié)目錄,4.1 I/O涉及的設(shè)備及相關(guān)概念簡介4.2 PCL中I/O模塊及類介紹4.3 應(yīng)用實例解析,4.1 I/O涉及的設(shè)備及相關(guān)概念簡介,,4.1.1 OpenNI開源框架OpenNI(開放式自然交互)來源于由業(yè)界領(lǐng)導(dǎo)的一個非營利性組織,創(chuàng)建于2010年11月,專注于提高和改善自然交互設(shè)備與應(yīng)用軟件的互操作能力。
3、其官方網(wǎng)站于12月8號正式公開,主要成員之一是PrimeSense公司(Kinect的核心芯片正是由這家公司提供),其他成員還包括開發(fā)ROS的機(jī)器人公司W(wǎng)illow Garage,以及游戲公司Side-Kick等。OpenNI是一個多語言、跨平臺的框架,它定義了一套用于編寫通用自然交互應(yīng)用的API。OpenNI的主要目的就是形成標(biāo)準(zhǔn)的API,便于下面兩個接口之間進(jìn)行通信:(1)視覺和音頻傳感器(用來感知周圍環(huán)境信息)。,(2)視覺和
4、音頻感知中間件(用來對應(yīng)用場景中所記錄的音頻和視覺數(shù)據(jù)進(jìn)行分析與理解,例如能夠接收一份可見的圖像數(shù)據(jù)并返回從中檢測到的手掌位置信息)。OpenNI提供了一組基于傳感器設(shè)備實現(xiàn)的API和另外一組由中間件組件實現(xiàn)的API,打破了傳感器和中間件之間的依賴關(guān)系。這樣,使用OpenNI API開發(fā)應(yīng)用程序時就不需要在各種中間件模塊的上層操作上浪費時間,可以做到一次編寫、隨處部署。OpenNI的這種分層設(shè)計機(jī)制允許中間件開發(fā)者可以直接基于最原始的
5、數(shù)據(jù)格式編寫算法,而不管這些數(shù)據(jù)是由何種傳感器設(shè)備產(chǎn)生,同時也讓傳感器生產(chǎn)商制造的設(shè)備能用于任何OpenNI兼容的應(yīng)用程序。OpenNI的這套標(biāo)準(zhǔn)化API使得自然交互應(yīng)用開發(fā)人員,可以利用由傳感器輸入并計算過的數(shù)據(jù)類型,很方便地跟蹤處理現(xiàn)實生活中的場景(例如,可以是表示人體全身的數(shù)據(jù),也可以是表示手的位置數(shù)據(jù),或者僅僅是深度圖里面的一組像素等)。這樣可以保證編寫應(yīng)用程序的時候,不用考慮傳感器或中間件供應(yīng)商相關(guān)的細(xì)節(jié)。圖4-1展示了O
6、penNI框架的應(yīng)用概念,分為三層:(1)應(yīng)用層:基于OpenNI實現(xiàn)的自然交互應(yīng)用軟件。(2)中間件接口層:代表OpenNI本身,提供了傳感器和中間件之間的交互接口。(3)硬件設(shè)備層:列出了捕捉視覺和音頻數(shù)據(jù)的多種硬件設(shè)備。,4.1.2 OpenNI兼容設(shè)備OpenNI目前已成為PCL集成進(jìn)來的第一個設(shè)備相關(guān)的第三方庫,用來抓取OpenNI兼容設(shè)備中的點云數(shù)據(jù)。上節(jié)描述的OpenNI應(yīng)用框架說明,只要底層的設(shè)備傳感器設(shè)備與O
7、penNI兼容,都可以作為點云數(shù)據(jù)輸入源,圖4-2則展示了目前流行的OpenNI兼容設(shè)備。其中,Primesense Reference Design、Microsoft Kinect和Asus XtionPro這3種攝像頭設(shè)備均進(jìn)行了OpenNI兼容性測試。選擇其中任何一個設(shè)備進(jìn)行點云數(shù)據(jù)采集,都可以經(jīng)OpenNI處理后轉(zhuǎn)化為標(biāo)準(zhǔn)數(shù)據(jù)供上層應(yīng)用使用。如今,OpenNI已成為微軟xbox360配件kinect在PC上的開源驅(qū)動中必須安
8、裝的一個API。,4.2 PCL中I/O模塊及類介紹,PCL中I/O庫提供了點云文件輸入輸出相關(guān)的操作類,并封裝了OpenNI兼容的設(shè)備源數(shù)據(jù)獲取接口,可直接從眾多感知設(shè)備獲取點云圖像等數(shù)據(jù)。I/O模塊利用21個類與28個函數(shù)實現(xiàn)了對點云的獲取、讀入、存儲等相關(guān)操作,其依賴于pcl_common和pcl_octree模塊以及OpenNI外部開發(fā)包。,4.2.1 I/O模塊中類以及全局函數(shù)說明I/O模塊中目前共有21個類,隨著RGDB
9、設(shè)備的流行必將引入更多的設(shè)備相關(guān)的I/O擴(kuò)展,以后有可能增加以下幾類。1. class pcl::FileReader類FileReader定義了PCD文件的讀取接口,主要用做其他讀取類的父類。從它繼承的子類必須實現(xiàn)自己的讀取函數(shù),即該類中的純虛函數(shù)其繼承關(guān)系如圖4-3所示。但為了保持向后兼容,提供了FILE_V6版本文件讀取的實現(xiàn)函數(shù)。,類FileReader關(guān)鍵成員函數(shù):virtual intreadHeader(const
10、std::string& file_name, sensor_msgs::PointCloud2& cloud, Eigen::Vector4f& origin, Eigen::Quaternionf& orientation, int& file_version, int& data_type, unsigned int& data_idx, const int offset=0
11、)=0純虛函數(shù),定義讀取點云文件頭的接口函數(shù),其參數(shù)意義:file_name讀取文件的文件名。cloud存儲讀取后的點云數(shù)據(jù),但只填充文件頭(關(guān)于PCD文件格式詳見本章后面實例分析)。origin點云獲取原點,該參數(shù)只有在文件版本大于FILE_V7才存在,否則為NULL。orientation點云獲取方向,該參數(shù)只有在文件版本大于FILE_V7才存在,否則為NULL。file_version文件版本(FILE_V7或者FIL
12、E_V6)。,data_type數(shù)據(jù)類型(二進(jìn)制置為1,ASCII碼置為0)。data_idx數(shù)據(jù)偏移文件頭末尾的偏移量。offset文件頭偏移文件開始的偏移量。virtual int read(const std::string&file_name, sensor_msgs::PointCloud2& cloud, Eigen::Vector4f& origin, Eigen::Quaternionf&a
13、mp; orientation, int& file_version, const int offset=0)=0為純虛函數(shù),定義讀取文件數(shù)據(jù)的接口函數(shù),讀取文件中的點云數(shù)據(jù)存儲到cloud對象中,其他參數(shù)同上函數(shù)。int read(const std::string &file_name, sensor_msgs::PointCloud2& cloud, const int offset = 0)功能同上
14、函數(shù)(僅適用于FILE_V6版本文件獲取,因為sensor_msgs::PointCloud2不包含傳感器原點和方向數(shù)據(jù),若讀取高版本數(shù)據(jù)會產(chǎn)生警告信息)。,templateint read(const std::string& file_name, pcl::PointCloud& cloud, const int offset=0)功能同上函數(shù),只是帶有模板參數(shù)的成員函數(shù)。2. class pcl::FileW
15、riter類FileWriter與FileReader對應(yīng),是寫入PCD文件的類接口定義,可以作為其他寫入類的父類。從它繼承的子類必須實現(xiàn)自己的寫入函數(shù),即該類中的純虛函數(shù),其繼承關(guān)系如圖4-4所示。,類FileWriter關(guān)鍵成員函數(shù):virtual int write(const std::string& file_name, const sensor_msgs::PointCloud2& cloud, cons
16、t Eigen::Vector4f& origin=Eigen::Vector4f::Zero(), const Eigen::Quaternionf& orientation=Eigen::Quaternionf::Identity(), const bool binary=false)=0;點云寫入到對應(yīng)文件的純虛函數(shù)接口定義,其參數(shù)意義:file_name寫入文件的文件名。cloud需要寫入的點云對象。or
17、igin寫入文件頭的點云獲取原點,默認(rèn)為(0, 0, 0, 0)。orientation寫入文件頭的點云獲取方向。binary設(shè)置寫入時的類型(true為二進(jìn)制,false為ASCII碼,默認(rèn)為ASCII碼)。,templateintwrite(const std::string& file_name, const pcl::PointCloud& cloud, const bool binary=false)功
18、能同上函數(shù),只是添加了模板參數(shù)的模板成員函數(shù)。3. class pcl::Grabber類Grabber為PCL1.X對應(yīng)的設(shè)備驅(qū)動接口的基類定義,繼承關(guān)系如圖4-5所示。,類Grabber關(guān)鍵成員函數(shù):templateboost::signals2::connectionregisterCallback(const boost::function& callback)提供回調(diào)函數(shù)指針,當(dāng)獲取每幀圖像或點云數(shù)據(jù)時都會啟
19、動回調(diào)函數(shù):templatebool providesCallback() const判斷是否提供回調(diào)函數(shù):virtual void start()=0啟動設(shè)備,開始傳輸數(shù)據(jù)流:virtual void stop()=0停止設(shè)備上的數(shù)據(jù)流傳輸:virtual std::string getName() const = 0,返回明確的子類名字:virtual bool isRunning() const = 0判斷是否
20、在傳輸數(shù)據(jù)流:virtual float getFramesPerSecond() const = 0獲取FPS幀率,即每秒多少幀數(shù)據(jù)。4. class openni_wrapper::OpenNIDevice類OpenNIDevice定義OpenNI設(shè)備的基類,繼承該基類可以實現(xiàn)不同的OpenNI設(shè)備子類,用于獲取包括紅外數(shù)據(jù)、RGB數(shù)據(jù)、深度圖像數(shù)據(jù)等。繼承關(guān)系如圖4-6所示,目前包括如下設(shè)備Primesense PSDK,
21、Microsoft Kinect,Asus Xtion Pro/Live。,類OpenNIDevice關(guān)鍵成員函數(shù):bool findCompatibleImageMode(const XnMapOutputMode& output_mode, XnMapOutputMode& mode)const throw()查詢是否有與output_mode對應(yīng)的圖像模式匹配的輸出模式,如果有則返回true并且存儲兼容模式在m
22、ode中,否返回值為false。例如設(shè)備支持30Hz的VGA模式,而請求輸出為30Hz的QVGA模式則通過下采樣是可以兼容的,但是設(shè)備支持25Hz的VGA而請求為30Hz的SXGA就不兼容。bool findCompatibleDepthMode(const XnMapOutputMode& output_mode, XnMapOutputMode& mode)const throw()功能和參數(shù)同上,只是針對深度圖
23、像的模式,并非上述彩色圖像的模式。bool isImageModeSupported(const XnMapOutputMode& output_mode) const throw(),只判斷是否支持該output_mode所給定的圖像模式,支持返回true,否則返回false。bool isDepthModeSupported(const XnMapOutputMode& output_mode) const th
24、row()只判斷是否支持該output_mode所給定的深度圖像模式,支持返回true,否則返回false。const XnMapOutputMode& getDefaultImageMode() const throw()const XnMapOutputMode& getDefaultDepthMode() const throw()const XnMapOutputMode& getDefaultI
25、RMode() const throw()以上三個函數(shù)分別是獲取默認(rèn)的RGB、深度、紅外圖像的輸出模式。void setImageOutputMode(const XnMapOutputMode& output_mode),void setDepthOutputMode(const XnMapOutputMode& output_mode)void setIROutputMode(const XnMapOutput
26、Mode& output_mode)以上三個函數(shù)分別是設(shè)置RGB、深度、紅外圖像的輸出模式。XnMapOutputMode getImageOutputMode() constXnMapOutputMode getDepthOutputMode() constXnMapOutputMode getIROutputMode() const以上三個函數(shù)分別是獲取當(dāng)前的RGB、深度、紅外圖像的輸出模式。void setDe
27、pthRegistration(bool on_off)設(shè)置深度圖像是否與RGB圖像對齊。bool isDepthRegistrationSupported() const throw()判斷設(shè)備是否支持深度圖像與RGB圖像對齊void setSynchronization(bool on_off),設(shè)置設(shè)備是否同步輸出RGB和深度圖像。bool isSynchronized() const throw()判斷設(shè)備是否同步輸
28、出RGB和深度圖像,如果是返回true,否則返回false。bool isSynchronizationSupported() const throw()判斷設(shè)備是否支持同步輸出RGB和深度圖像。bool isDepthCropped() const返回深度圖像是否被裁剪過,是為true,否則為false。void setDepthCropping(unsigned x, unsigned y, unsigned width,
29、 unsigned height)打開深度圖像的裁剪,x、y分別為兩個方向上的起始裁剪位置,width和height分別為保留的x與y方向上的尺寸。float getImageFocalLength(int output_x_resolution=0) const throw(),獲取RGB圖像的焦距長度(像素)。float getDepthFocalLength(int output_x_resolution=0) const
30、throw()獲取深度圖像的焦距長度(像素)。float getBaseline() const throw()獲取基線長度。virtual void startImageStream()virtual void stopImageStream()上面一對函數(shù)為啟動和停止RGB數(shù)據(jù)流的采集。virtual void startDepthStream()virtual void stopDepthStream()上面一對
31、函數(shù)為啟動和停止深度數(shù)據(jù)流的采集。virtual void startIRStream()virtual void stopIRStream(),上面一對函數(shù)為啟動和停止紅外數(shù)據(jù)流的采集。bool hasImageStream() const throw()bool hasDepthStream() const throw()bool hasIRStream() const throw()以上三個函數(shù)分別判斷設(shè)備是否支持RG
32、B、深度、紅外圖像數(shù)據(jù)采集,如果是返回true,否則返回false。virtual bool isImageStreamRunning() const throw()virtual bool isDepthStreamRunning() const throw()virtual bool isIRStreamRunning() const throw()以上三個函數(shù)分別判斷設(shè)備是否正在進(jìn)行RGB、深度、紅外圖像數(shù)據(jù)采集。Cal
33、lbackHandle registerImageCallback(const ImageCallbackFunction& callback, void* cookie=NULL) throw()bool unregisterImageCallback(const CallbackHandle& callbackHandle) throw(),上面一對函數(shù)分別為RGB圖像數(shù)據(jù)流的回調(diào)函數(shù)注冊與注銷。Callback
34、Handle registerDepthCallback(const DepthImageCallbackFunction& callback, void* cookie=NULL) throw()bool unregisterDepthCallback(const CallbackHandle& callbackHandle) throw()上面一對函數(shù)分別為深度圖像數(shù)據(jù)流的回調(diào)函數(shù)注冊與注銷。CallbackH
35、andle registerIRCallback(const IRImageCallbackFunction& callback, void* cookie=NULL) throw()bool unregisterIRCallback(const CallbackHandle& callbackHandle)throw()上面一對函數(shù)分別為紅外圖像數(shù)據(jù)流的回調(diào)函數(shù)注冊與注銷。,const char* getSeria
36、lNumber() const throw()獲取設(shè)備對應(yīng)的序列號,注意該返回值有可能為空字符串。const char* getConnectionString() const throw()獲取設(shè)備連接字符串,一般格式為vendorID/productID@BusID/DeviceID。const char* getVendorName() const throw()const char* getProductName()
37、const throw()unsigned short getVendorID() const throw()unsigned short getProductID() const throw()以上4個函數(shù)分別獲取廠商和產(chǎn)品的名字字符串及ID編號。unsigned char getBus() const throw()獲取設(shè)備所在的USB總線。,unsigned char getAddress() const throw()
38、獲取設(shè)備所在USB地址。void setRGBFocalLength(float focal_length)void setDepthFocalLength(float focal_length)以上兩個函數(shù)分別設(shè)定RGB與深度圖像獲取時的焦距大小。5. class openni_wrapper::DeviceKinect6. class openni_wrapper::DevicePrimesense7. class o
39、penni_wrapper::DeviceXtionPro以上3個類分別封裝了Kinect、Primesense、XtionPro相關(guān)設(shè)備操作和數(shù)據(jù)獲取操作實現(xiàn),其詳細(xì)接口參考其父類OpenNIDevice的關(guān)鍵函數(shù)說明。8. Class openni_wrapper::DeviceONI,封裝了利用ONI文件回放虛擬類kinect設(shè)備的操作和數(shù)據(jù)獲取操作實現(xiàn),其詳細(xì)接口參考其父類OpenNIDevice的關(guān)鍵函數(shù)說明。9. Cl
40、ass openni_wrapper::OpenNIDriver類OpenNIDriver采用單例模式實現(xiàn)對底層驅(qū)動的封裝,里面包含一xn::Context對象,提供給所有設(shè)備使用。該類提供了枚舉和訪問所有設(shè)備的方法實現(xiàn)。類OpenNIDevice關(guān)鍵成員函數(shù):unsigned updateDeviceList()枚舉所有系統(tǒng)可以獲取的設(shè)備列表,返回獲取設(shè)備的數(shù)目。unsigned getNumberDevices() con
41、st throw()獲取系統(tǒng)可用設(shè)備的數(shù)目。,boost::shared_ptr createVirtualDevice(const std::string& path, bool repeat, bool stream) const從ONI文件創(chuàng)建一虛擬設(shè)備,其中path為ONI文件的路徑,repeat設(shè)置是否虛擬設(shè)備支持無限循環(huán)從ONI文件獲取數(shù)據(jù),stream設(shè)置虛擬設(shè)備是支持?jǐn)?shù)據(jù)流形式的數(shù)據(jù)獲取還是引發(fā)式的數(shù)據(jù)獲取。
42、boost::shared_ptr getDeviceByIndex(unsigned index) const返回一設(shè)備,index為給定的設(shè)備索引。boost::shared_ptr getDeviceBySerialNumber(const std::string& serial_number) const返回一設(shè)備,serial_number為給定的設(shè)備的序列號。boost::shared_ptr getDev
43、iceByAddress(unsigned char bus, unsigned char address) const,返回一設(shè)備,bus為USB設(shè)備總線號,address為USB設(shè)備地址。const char* getSerialNumber(unsigned index) const throw()獲取索引為index的設(shè)備序列號,但該設(shè)備未被創(chuàng)建。const char* getConnectionString(unsign
44、ed index) const throw()獲取索引為index的設(shè)備連接字符串,但該設(shè)備未被創(chuàng)建。void stopAll()停止所有設(shè)備。static OpenNIDriver& getInstance()為靜態(tài)成員函數(shù),獲取唯一的設(shè)備實例。static void getDeviceType(const std::string&connection_string, unsigned short&
45、vendorId, unsigned short& productId);為靜態(tài)成員函數(shù),獲取設(shè)備連接字符串存儲在connection_string,設(shè)備廠商及產(chǎn)品ID,存儲在,為靜態(tài)成員函數(shù),獲取設(shè)備連接字符串存儲在connection_string,設(shè)備廠商及產(chǎn)品ID,存儲在vendorId、productId中。10. Class openni_wrapper::OpenNIException類OpenNIExcep
46、tion封裝一般的異常處理實現(xiàn),其關(guān)鍵成員函數(shù)如下:virtual const char* what() const throw()返回異常消息字符串。const std::string &getFunctionName() const throw()返回發(fā)生異常的函數(shù)名。const std::string &getFileName() const throw()返回發(fā)生異常的文件名。unsigned ge
47、tLineNumber() const throw()返回發(fā)生異常的行號。,11. Class openni_wrapper::Image類Image是簡單的圖像數(shù)據(jù)封裝基類,其繼承關(guān)系如圖4-7所示。virtual bool isResizingSupported(unsigned input_width, unsigned input_height, unsigned output_width, unsigned ou
48、tput_height) const = 0純虛函數(shù),具體實現(xiàn)見子類,判斷圖像是否支持尺寸變換,input_width、input_height為設(shè)定的寬度和高度,output_width、output_height變換后的寬度和高度。,virtual void fillRGB(unsigned width, unsigned height, unsigned char *rgb_buffer, unsigned rgb_line_s
49、tep=0) const = 0用RGB數(shù)據(jù)填充用戶給定的rgb_buffer,返回圖像的寬度和高度為width、height,隔rgb_line_step行輸出到輸出緩存中。virtual Encoding getEncoding() const = 0返回原始編碼的方式。void fillRaw(unsigned char *rgb_buffer) const throw()用原始數(shù)據(jù)填充用戶給定的rgb_buffer。
50、virtual void fillGrayscale(unsigned width, unsigned height, unsigned char* gray_buffer, unsigned gray_line_step=0)const = 0用灰度數(shù)據(jù)填充給定的gray_buffer,其他參數(shù)參考函數(shù),fillRGB。unsigned getWidth() const throw()unsigned getHeight() c
51、onst throw()以上兩個函數(shù)分別獲取圖像寬度和高度。unsigned getFrameID() const throw()獲取幀的ID號。Unsigned longgetTimeStamp() const throw()獲取圖像的時間戳。const xn::ImageMetaData &getMetaData() const throw()獲取圖像原始OpenNI格式數(shù)據(jù)。12. Class openni
52、_wrapper::ImageBayerGRBG13. Class openni_wrapper::ImageRGB24,14. Class openni_wrapper::ImageYUV422以上3個類分別實現(xiàn)了對原始數(shù)據(jù)BayerGRBG、RGB24、YUV422到圖像轉(zhuǎn)化接口,詳細(xì)參考其父類關(guān)鍵函數(shù)說明。15. Class pcl::OpenNIGrabber類OpenNIGrabber實現(xiàn)對OpenNI設(shè)備(例如Pri
53、mesense PSDK,Microsoft Kinect,Asus XTion Pro/Live)數(shù)據(jù)的采集接口,詳細(xì)參考其父類Grabber關(guān)鍵函數(shù)說明。16. class pcl::PCDReader17. class pcl::PLYReader以上兩個類分別是PCD、PLY文件格式讀入接口的實現(xiàn),詳細(xì)參考其父類pcl::FileReader。18. class pcl::PLYWriter19. Class pcl:
54、:PCDWriter以上兩個類分別是PCD、PLY文件格式寫出接口的實現(xiàn),,詳細(xì)參考其父類pcl::FileWriter。20. Class pcl::PCLIOException類PCLIOException是I/O相關(guān)的異常處理接口實現(xiàn),詳細(xì)參考其父類PCLException。,4.2.2 I/O模塊其他關(guān)鍵成員說明PCL_EXPORTS int pcl::io::saveOBJFile(const std::string
55、& file_name, const pcl::TextureMesh& tex_mesh, unsigned precision=5)該函數(shù)實現(xiàn)對TextureMesh保存到OBJ文件,file_name為OBJ文件名,tex_mesh為網(wǎng)格模型數(shù)據(jù),precision為保存時的精度(默認(rèn)為5)。PCL_EXPORTS int pcl::io::saveOBJFile(const std::string&
56、file_name, const pcl::PolygonMesh& mesh, unsigned precision=5)功能同上,存儲對象為PolygonMesh。int pcl::io::loadPCDFile(const std::string& file_name, sensor_msgs::PointCloud2& cloud),打開一版本V6.0的PCD文件,file_name為文件名,clou
57、d存儲讀入的點云數(shù)據(jù)。templateint pcl::io::loadPCDFile(const std::string& file_name, pcl::PointCloud& cloud)打開任何類型的PCD點云文件,file_name為文件名,cloud存儲讀入的點云數(shù)據(jù)。int pcl::io::savePCDFile(const std::string& file_name, const se
58、nsor_msgs::PointCloud2& cloud, constEigen::Vector4f& origin=Eigen::Vector4f::Zero(), const Eigen::Quaternionf& orientation=Eigen::Quaternionf::Identity(), const bool binary_mode=false)保存點云到PCD文件,file_name文件名
59、,cloud需要保存的點云數(shù)據(jù),origin為獲取點云的原點,orientation為獲取點云的方向,binary_mode設(shè)置是否保存為二進(jìn),制格式,默認(rèn)為false。templateint pcl::io::savePCDFile(const std::string& file_name, const pcl::PointCloud& cloud, bool binary_mode=false)保存點云到PCD
60、文件,file_name文件名,cloud需要保存的點云數(shù)據(jù),binary_mode設(shè)置是否保存為二進(jìn)制格式,默認(rèn)為false。templateint pcl::io::savePCDFileASCII(const std::string& file_name, const pcl::PointCloud& cloud)以ASCII方式保存點云到PCD文件,file_name文件名,cloud需要保存的點云數(shù)據(jù)。
61、templateint pcl::io::savePCDFileBinary(const std::string& file_name, const,pcl::PointCloud& cloud)以二進(jìn)制方式保存點云到PCD文件,file_name文件名,cloud需要保存的點云數(shù)據(jù)。void pcl::throwPCLIOException(const char function_name, const char
62、 file_name, unsigned line_number, const char format, …)異常處理函數(shù),function_name發(fā)生異常的函數(shù)名,file_name發(fā)生異常的文件名,發(fā)生異常的行號line_number,發(fā)生異常的拋出消息format。templateint pcl::io::loadPLYFile(const std::string& file_name, pcl::PointClo
63、ud& cloud)打開ply文件,file_name文件名,cloud保存打開的點云數(shù)據(jù)。template,int pcl::io::savePLYFile(const std::string& file_name, const pcl::PointCloud& cloud, bool binary_mode=false)保存點云到PLY文件,file_name文件名,cloud需要保存的點云數(shù)據(jù),bin
64、ary_mode設(shè)置是否保存為二進(jìn)制格式,默認(rèn)為false。templateint pcl::io::savePLYFileASCII(const std::string& file_name, const pcl::PointCloud& cloud)templateint pcl::io::savePLYFileBinary(const std::string& file_name, const pc
65、l::PointCloud& cloud)以上兩個函數(shù)分別以為ASCII和二進(jìn)制方式保存點云到ply文件,file_name文件名,cloud需要保存的點云數(shù)據(jù)。PCL_EXPORTS int pcl::io::savePLYFile(const std::string&,file_name, const pcl::PolygonMesh& mesh, unsigned precision=5)保存Poly
66、gonMesh對象到PLY文件,file_name為PLY文件名,mesh為需要保存的對象數(shù)據(jù),precision為保存精度(默認(rèn)為5)。CL_EXPORTS void pcl::io::saveRgbPNGFile(const std::string &file_name, const unsigned char rgb_image, int width, int height)保存RGB數(shù)據(jù)為PNG文件,file_nam
67、e為PNG文件名,rgb_image為RGB數(shù)據(jù),width、height為圖像數(shù)據(jù)的寬度和高度。PCL_EXPORTS void pcl::io::saveMonoPNGFile(const std::string& file_name, const unsigned char mono_image, int width, int height)功能同上,只是保存的數(shù)據(jù)為灰度圖像格式。PCL_EXPORTS void p
68、cl::io::saveShortPNGFile(const std::string& file_name, const unsigned short short_image, int width, int,height)功能同上,只是保存的數(shù)據(jù)為16位灰度圖像格式。templatevoid pcl::io::savePNGFile(const std::string& file_name, const pcl::
69、PointCloud& cloud)保存點云中RGB域為png文件,cloud為包含RGB域的點云對象,file_name為png文件名。PCL_EXPORTS int pcl::io::saveVTKFile(const std::string& file_name, const pcl::PolygonMesh& triangles, unsigned precision=5)保存PolygonMesh
70、對象數(shù)據(jù)為VTK文件,file_name為VTK文件名,triangles為需要保存的數(shù)據(jù),precision為保存精度(默認(rèn)為5)。,4.3 應(yīng)用實例解析,,4.3.1 PCD(點云數(shù)據(jù))文件格式本小節(jié)描述PCD(點云數(shù)據(jù))文件格式,及其他在點云庫(PCL)中應(yīng)用的方法。1. 為什么用一種新的文件格式?PCD文件格式并非白費力氣地做重復(fù)工作,現(xiàn)有的文件結(jié)構(gòu)因本身組成的原因不支持由PCL庫引進(jìn)n維點類型機(jī)制處理過程中的某些擴(kuò)展,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- io輸入輸出外文翻譯
- 第4章(學(xué)案) 細(xì)胞的物質(zhì)輸入和輸出 閱讀探究
- 第4章(學(xué)案) 細(xì)胞的物質(zhì)輸入和輸出 閱讀探究
- 第11章高級輸出與輸入-read
- 實驗五__io口直接用于輸入和輸出
- cad經(jīng)典教程_第11章_圖形輸出
- 第10章輸入、輸出接口與外部設(shè)備
- 單片機(jī)實驗 io口的輸入輸出實驗
- 單片機(jī)實驗 io口的輸入輸出實驗
- 輸入IO地址表.dwg
- 輸入IO地址表.dwg
- 輸入IO地址表.dwg
- 輸入IO地址表.dwg
- 輸出IO地址表.dwg
- 輸出IO地址表.dwg
- 輸出IO地址表.dwg
- 第4章 數(shù)據(jù)庫設(shè)計基礎(chǔ)
- 第4章數(shù)據(jù)庫設(shè)計基礎(chǔ)
- 輸出IO地址表.dwg
- 65納米工藝通用輸入-輸出單元庫設(shè)計.pdf
評論
0/150
提交評論