PCL点云处理库之I/O模块
I/O模块中共有21个类,28个函数实现,主要用于点云文件输入输出、支持OpenNI的设备源数据获取接口(多种感知设备获取点云图像数据)、数据存储等功能。
1、 pcl::FileReader PCD文件读取
- intreadHeader(xxx)读取点云文件头接口函数
- read(xxx)读取点云数据到cloud对象中
2、pcl::FileWriter PCD文件存写
- write(xxx)点云数据写入到文件中
3、pcl::Grabber 设备驱动接口的基类
- connectionregisterCallback(xxx) 获取每张图像或点云数据时,启动此回调
- providesCallback(xxx) 判断是否提供回调函数
- start(xxx)启动设备,开始传输数据流
- stop(xxx)停止设备上的数据传输
- getName()获取子类的类名
- isRunning()判断流是否正在传输
- getFramesPerSecond()获取帧率数据
4、openni_wrapper::OpenNIDevice OpenNI设备的基类,用于获取红外数据、RGB数据、深度图像数据等
- findCompatibleImageMode() 查询是否具有对应于图像(彩色图像)模式相匹配的输出模式
- findCompatibleDepthMode() 查询深度图像模式相匹配的输出模式
- isImageModeSupported() 是否支持 给定的图像(彩色)模式
- isDepthModeSupported()是否支持 给定的图像(深度)模式
- getDefaultImageMode() 获取默认RGB图像的输出模式
- getDefaultDepthMode()深度
- getDefaultIRMode()红外
- setxxx RGB、深度、红外对应
- getImageOutputMode()获取当前RGB图像的输出模式,对应还有深度、红外
- setDepthRegistration()设置深度图像与RGB图像对齐
- isDepthRegistrationSupported() 判断设备是否支持深度图像与RGB对齐
- setSynchronization()设置设备是否同步输出RGB和深度图像
- isSynchronizationSupported()判断是否支持同步
- isDepthCropped()判断深度图像是否被裁剪
- setDepthCropping()打开深度图像的裁剪
- getImageFocalLength()获取RGB图像的 焦距长度(像素)
- getDepthFacalLength()获取深度图像的焦距长度(像素)
- getBaseline() 获取基线长度
- startImageStream()启动RGB数据流采集,对应有stop
- startDepthStream() 启动深度数据流采集,对应有stop
- stratIRStream()启动红外数据流采集,对应有stop
- hasImageStream()判断设备是否支持RGB数据采集,对应有深度、红外
- isImageStreamRunning()判断设备是否进行数据采集,有RGB、深度、红外
- registerImageCallback() RGB数据流的回调函数注册与注销,对应有深度、红外
- getSerialNumber() 获取设备序列号
- getConnectionString()获取设备连接字符串,如:vendorID/productID@BusID/DeviceID
- getVendorName()、getProductName、getVendorID、getProductID获取厂商和产品名字 及ID编号
- getBus()获取设备所在USB总线
- getAddress()获取设备所在USB地址
- setRGBFocalLength()设定RGB焦距大小,对应有深度
5、openni_wrapper::DeviceKinect
6、openni_wrapper::DevicePrimesense
7、openni_wrapper::DeviceXtionPro
以上三个分别封装kinect、Primesense、XtionPro相关设备操作和数据获取
8、openni_wrapper::DeviceONI ONI文件回放虚拟类kinect设备的操作(说实话,不知道在说啥)
9、openni_wrapper::OpenNIDrever 单例模式实现对底层驱动封装,有一个xn::Context对象,提供所有设备使用
- updateDeviceList() 枚举设备列表
- getNumberDevices()
- createVirtualDevice()从ONI文件创建一个虚拟设备
- getDeviceByIndex()返回以index为索引的设备
- getDebiceBySerialNumber()返回以序列号对应的设备
- getDeviceByAddress()根据usb总线、usb地址返回设备
- getSerialNumber()
- getConnectionString()返回index索引对应的设备连接符
- stopAll()停止所有设备
- getInstance()获取唯一设备实例
- getDeviceType()
10、openni_wrapper::OpneNIException 异常处理
- what() 返回异常消息字符串
- getFunctionName()异常函数名
- getFileName()异常文件名
- getLineNumber()异常行号
11、openni_wrapper::Image 图像数据封装基类
- isResizingSupported()是否支持尺寸变换
- fillRGB()RGB数据填充给定的buf
- getEncoding()原始编码方式
- fillRaw()原始数据填充buf
- fillGrayscale()灰度数据填充buf
- getWidth\getHeight
- getFrameID()帧号
- longgetTimeStamp()时间戳
- getMetaData()获取图像原始OpenNI格式数据
12、openni_wrapper::ImageBayerGRBG
13、openni_wrapper::ImageRGB24
14、openni_wrapper::ImageYUV422
以上三个类分别是对原始数据BayerGRBG、RGB24、YUV422到图像转化接口
15、pcl::OpenNIGrabber 对OpenNI设备的实现
16、pcl::PCDReader
17、pcl::PLYReader
分别是PCD、PLY文件的读入接口,父类为FileReader
18、pcl::PCDWriter
19、pcl::PLYWiter
20、pcl::PCLIOException异常类的实现
I/O模块其他关键成员
1、pcl::io::saveOBJFile()
2、pcl::io::loadPCDFile()
3、pcl::io::savePCDFile()
4、pcl::io::savePCDFileASCII()
5、pcl::io::savePCDFileBinary()
6、pcl::throwPCLIOException()
7、pcl::io::savePLYFile()
8、pcl::io::saveRgbPNGFile()
9、pcl::io::saveMonoPNGFile() 保存为灰度图像格式
10、pcl::io::saveShortPNGFile()16位灰度图像格式
11、pcl::io::saveVTKFile()
I/O模块内容还挺多的,从设备、文件格式、读写、同步异步、各种文件格式存储、异常功能等,同时也说明一个共性,所有的IO模块都会包含这些基本的功能,只是具体实现不一样罢了,以后遇到IO模块时候,回来这里查一查就知道实际的功能及作用了,先记录到此。待续