日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

PCL:自定义创建带颜色的点云保存后rgb是一个很大的数,由x y z rgb解包为x y z r g b

發布時間:2023/11/27 生活经验 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PCL:自定义创建带颜色的点云保存后rgb是一个很大的数,由x y z rgb解包为x y z r g b 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于實驗需要自己需要從3D相機中讀取數據并保存為pcd格式,

下面是一部分讀取并保存的代碼,以及最后保存結果,但是在保存為pcd的時候發現是這個樣子:

?(如上代碼為PCD文件中的頭文件,TYPE中的”U“就代表顏色信息的存儲格式
言歸正傳,如何將一個數值拆分成單個的RGB數)pcd里邊的rgb是連在一起的不是我們平時看到的r g b分開的。

官網鏈接:http://pointclouds.org/documentation/structpcl_1_1_r_g_b.html

另外一種TYPE是F F F F的:

當rgb的數據類型是U的時候,也就是rgb對應的type值rgb = R<<16 | G<<8 | B | 1<<24其中RGB的值的范圍是[0,255]

下面介紹該文件每行具體所代表的含義:

(1).VERSION 0.7
? ? 指定pcd文件的版本。

(2).FIELDS
? ? 指定每個點可以具有的維度,以及每個維度所代表的含義。
? ? 例如:FIELDS x y z r g b表示該點的位置信息(x,y,z),顏色信息(r,g,b)。

(3).SIZE
? ? 以字節為單位指定每個數據所占用的內存。

(4).TYPE
? ? 指定每個數據的數據類型。
? ? I:可表示int8,int16,int32。
? ? U:可表示uint8,unit16,uint32。
? ? F:表示float(上圖所用的為浮點類型)。

(5).COUNT
? ? 指定每個維度有多少元素。
? ? 例如xyz數據通常只有一個元素。

(6).WIDTH
? ? 指定數據點的寬度,它包含兩個含義:
? ? 1.可指定點云總個數(與POINTS相同),用于無組織的數據。
? ? 2.可指定有組織點云數據的寬度(連續點的總數)。

(7).HEIGTH
? ? 指定數據點的高度,它包含兩個含義:
? ? 1.可指定有組織的點云數據的高度(總行數)。
? ? 2.對未組織的數據,它被設置為1。

(8).POINTS
? ? 指定點云總個數。

(9).VIEWPOINT
? ? 采集數據時的視點(由平移tx,ty,tz和四元數qw,qx,qy,qz組成)。

(10).DATA
? ? 點云數據存儲的數據類型(支持ascii和binary)。

# .PCD v0.7 - Point Cloud Data file format  
VERSION 0.7 //PCD文件版本
FIELDS x y z r g b intensity timestamp //每個點包含哪些維度,xyz表示XYZ三維坐標,rgb表示顏色(可以分開表示,也可以一個浮點數表示),intensity表示激光反射強度,timestamp表示時間戳,normal_x、normal_y、normal_z表示平面法線三維坐標,j1、j2、j3表示不變矩。
SIZE 4 4 4 1 1 1 1 8 //每個維度的數據占用字節大小
TYPE F F F U U U U F //每個維度的數據類型,I表示有符號類型int8(char)、int16(short)、int32(int),U表示無符號類型uint8(unsigned char)、uint16(unsigned short)、uint32(unsigned int),F表示浮點型
COUNT 1 1 1 1 1 1 1 1 //每個維度含有多少個元素(如果未提供COUNT屬性,默認值為1)
WIDTH 32 //用點的數量表示點云數據集的寬度。有兩種含義:1.無序數據集的點云中點的數量 2.有序點云數據集的寬度(一行中點的數量),有序點云數據集中,點云類似圖片或矩陣的結構,分為行和列,這種數據通常來自于立體攝像機(stereo camera)、時間飛行攝像機(Time Of Flight camera,使用紅外線或者光脈沖來估計光線從發射到檢測到的時間延遲來測量距離),知道點的相鄰關系,使算法計算更高效。
HEIGHT 2172 //用點云數據集中點的數量表示點云數據集的高度。高度有如下兩種含義:1.有序的點云數據集中,行的數量 2.無序點云數據集中,高度為1(可以用來判斷一個數據集是有序的還是無序的)
VIEWPOINT 0 0 0 1 0 0 0 //指定數據集合中點的采集視點。可以用來后續可能的坐標轉換,或者求平面法線坐標。格式是平移(tx ty tz) + 四元數(qw qx qy qz),默認是0 0 0 1 0 0 0。
POINTS 69504 //點云中點的總數(冗余字段)
DATA binary_compressed //點云數據的存儲類型,0.7版本支持兩種存儲方式:ascii和binary。

3 總結

? ? 所有的pcd文件前十行必須是以上的格式,并且不能改變順序。

最后查找原因是因為如下:(就是把RGB三個值通過位運算合一起了,你搜索 生成帶有rgb值的pcd文件并顯示?就可以看到說明)

?

所以需要再處理一下。

對于常用的點云PCD文件,存儲顏色信息通常由兩種格式:

TYPE1:10727339
TYPE2:1.00512e-038

兩種類型的區別只是保存的格式不一樣,TYPE1是float形式,TYPE2是int形式,都是用的位存儲。

言歸正傳,如何將一個數值拆分成單個的RGB數:

1、在PCL中讀取

int r = cloud->point[i].r;
int g = cloud->point[i].g;
int b = cloud->point[i].b;

2、位操作運算

unsigned long rgb = *reinterpret_cast<int*>(&cloud->points[i].rgb);
int r = (rgb>>16)&0x0000ff;
int g = (rgb>>8)&0x0000ff;
int b = (rgb)&0x0000ff;

如上為拆分方法,有時我們需要將存.txt文檔中的點信息和RGB信息轉換成PCD可讀文件。

解決辦法:參考鏈接:https://blog.csdn.net/wkxxuanzijie920129/article/details/51433626

https://blog.csdn.net/weixin_36642958/article/details/83628915?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-2.control

pcd文件中的格式為x y z rgb而不是分開的r g b,所以在原數據的基礎上要進行變形,//1、由r g b得到rgb(float):
int rgb = ((int)r << 16 | (int)g << 8 | (int)b);  //式中的“<<”為左移符號;//2、由rgb得到r g b(int):將PCD文件中用一個數值表示的RGB信息拆分成RGB三通道信息:
int r = (rgb >> 16) & 0x0000ff;
int g = (rgb >> 8) & 0x0000ff; 
int b = (rgb) & 0x0000ff; 

下面是對應不同的程序得到的pcd格式:

for (int i = 0; i < cloudrgb->points.size(); i++){cloudrgb->points[i].x = (float)rgb_cloud[6 * i + 0] / cloud_unit;cloudrgb->points[i].y = (float)rgb_cloud[6 * i + 1] / cloud_unit;unsigned short z = (unsigned short)rgb_cloud[6 * i + 2];//2對應Zcloudrgb->points[i].z = (float)z / cloud_unit;//(這里再將它存為pcd格式)/*cloudrgb->points[i].r = rgb_cloud[6 * i + 3];cloudrgb->points[i].g = rgb_cloud[6 * i + 4];cloudrgb->points[i].b = rgb_cloud[6 * i + 5];*///由r g b得到rgb(float):int frgb = 0;frgb = ((int)rgb_cloud[6 * i + 3] << 16 | (int)rgb_cloud[6 * i + 4] << 8 | (int)rgb_cloud[6 * i + 5]);cloudrgb->points[i].rgb = *reinterpret_cast<float*>(&frgb);//frgb在這由int型轉換成了float型。//reinterpret_cast()為指針類型轉換}
std::string namergb = "F:\\coutsaved\\tongling\\zhiwei\\lianxupcd\\XYZRGB\\two\\test" + std::to_string(m) + ".pcd";
pcl::io::savePCDFileASCII(namergb, *cloudrgb);//保存

保存結果:

?

總結

以上是生活随笔為你收集整理的PCL:自定义创建带颜色的点云保存后rgb是一个很大的数,由x y z rgb解包为x y z r g b的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩一卡二卡在线 | 日韩淫 | 亚洲精品二区 | 欧美综合国产 | 色诱av| 狠狠干欧美| 精品欧美乱码久久久久久 | 97成人资源 | 在线播放不卡 | 超碰操| 免费av的网站 | 91影院在线播放 | 山村淫强伦寡妇 | 毛片网站免费在线观看 | 色窝网 | 国产youjizz| 99国产精品一区二区三区 | 国产精品久久久久久精 | 夜夜爽av| 黄色精品网站 | 波多野结衣在线一区 | 91国自啪| 天天操天天摸天天干 | 黄色网址在线看 | 日本韩国在线 | www.五月婷婷.com | 999久久久久久久久6666 | 亚洲国产亚洲 | 国产一二三区在线视频 | av一二三四区| 韩国短剧在线观看 | 私密视频在线观看 | 好吊色一区二区 | 人妻av一区二区 | 白俄罗斯毛片 | 精品国产午夜福利在线观看 | 视频久久| 国产人成视频在线观看 | 国产精品一区久久 | 在线天堂www在线国语对白 | 伊人伊人| 亚洲福利在线视频 | xx视频在线 | 成人性生交大片 | 水蜜桃亚洲精品 | 国产高清久久久 | 男阳茎进女阳道视频大全 | 日韩精品视频在线免费观看 | 天堂成人在线视频 | av不卡在线观看 | 欧美日韩精品中文字幕 | 正在播放老肥熟妇露脸 | 日本成人激情视频 | 午夜性生活片 | 污视频免费在线观看网站 | 极品少妇在线观看 | 1024在线视频 | 久久久av免费 | 日韩乱论 | 日韩国产第一页 | 久久久国产精品人人片 | 99r热 | 久久精品牌麻豆国产大山 | 久久天天 | 中国a一片一级一片 | 国产精品成人69xxx免费视频 | 艳妇臀荡乳欲伦交换在线播放 | 男女裸体影院高潮 | 久久中文精品 | 制服丝袜国产精品 | 国产综合精品一区二区三区 | 先锋影音男人 | 青青草视频播放 | 亚洲精品视频91 | 性色av一区二区三区免费 | 高清免费毛片 | 成人免费无码大片a毛片 | 91在线看片 | 国产一区二区网站 | 欧美精品久久 | 午夜精产品一区二区在线观看的 | 国产无遮挡aaa片爽爽 | 日韩欧美综合 | 91精品国产欧美一区二区成人 | 国产精品女人精品久久久天天 | 国产精品毛片久久久久久久 | 手机看片1024日韩 | 一级片观看 | 在线你懂的 | 国产免费999 | 欧美亚洲一级 | 中国性xxx| 国产91精品在线观看 | 99re视频精品 | 中文字幕播放 | 青春草网站 | 中文字幕在线日韩 | 秋霞国产精品 | 精品黑人一区二区三区久久 |