में आरजीबी मानों को अनपॅक करना यह एक पीएलसी फ़ाइल में एन्कोडेड आरजीबी मानों को अनपॅक करने के बारे में है। मैंने पीएलसी दस्तावेज में वर्णित प्रक्रिया के साथ ऐसा किया, लेकिन मुझे प्राप्त किए गए अनपॅक किए गए आरजीबी मान काफी सही नहीं हैं। जब मैं उन्हें आर के साथ साजिश देता हूं तो प्रस्तुतिकरण वास्तविक सेटिंग में रंगों के अनुरूप नहीं होता है (मुझे एक निश्चित डिग्री है कि समस्या आर के साथ प्लॉट किए जाने के तरीके से नहीं है)।पॉइंट क्लाउड डेटा सेट
उदाहरण के लिए चित्रित छवि में चित्रित क्षेत्र में ग्रे और नीले रंग (दो कुर्सियां और एक टेबल) होना चाहिए।
स्रोत PCL फ़ाइल में पाया जा सकता है: https://docs.google.com/open?id=0Bz5-HVcDiF6SanBZU0JWVmJwWHM और कम से पैक रंग मूल्यों के साथ फ़ाइल: https://docs.google.com/open?id=0Bz5-HVcDiF6SV2pYQ0xUbTAwVmM।
uint32_t rgbD = *reinterpret_cast<int*>(&kinectValue);
uint16_t rD = (rgbD >> 16) & 0x0000ff;
uint16_t gD = (rgbD >> 8) & 0x0000ff;
uint16_t bD = (rgbD) & 0x0000ff;
मैं वास्तव में अगर तुम मुझे पता है जहाँ मैं गलत हो गया है दे सकता है की सराहना करेंगे: इसके अलावा निम्नलिखित एक ग में रंग मान खोल प्लस प्लस स्थापित करने के लिए इस्तेमाल किया कोड है।
अद्यतन:
library(rgl)
pcd <- read.table(file.choose(),sep="")
names(pcd) <- c("x","y","z","r","g","b")
plot3d(pcd$x,pcd$y,pcd$z,col=rgb(pcd$r,pcd$g,pcd$b,maxColorValue=255))
अपडेट::
के बाद आर कोड स्निपेट मैं 3 डी में मूल्यों की साजिश रचने में प्रयोग किया जाता है
के बाद, कोड मैं डेटा पढ़ने के लिए प्रयोग किया जाता है C++ :
/*
Reads in a file from Kinect with unpacked color values, filter the color value component and
sends it to be unpacked
*/
int fileRead(){
string line;
int lineNum = 0;
ifstream myfile ("res/OnePerson4.pcd");
if (myfile.is_open())
{
while (myfile.good())
{
lineNum++;
getline (myfile,line);
// Exclude the header information in the kinect file from the unpacking process
//if(lineNum > 10 && lineNum <20){//This for loop is activated when testing
if(lineNum > 10){
//Test code to extract the x,y,z values
string xyzvalFromKinectStr = line.substr(0,line.find_last_of(' '));
//cout<<xyzvalFromKinectStr<<"\n";
//Extract the packed rgb value
string valFromKinectStr = line.substr(line.find_last_of(' '));
double kinectVal = ::atof(valFromKinectStr.c_str());
kinectToRgb(kinectVal, xyzvalFromKinectStr);
}
}
myfile.close();
}
else
{
cout << "Unable to open file";
}
return 0;
}
दोनों लिंक मेरे लिए शून्य बाइट डाउनलोड करते हैं। –
@MichaelDaum, इसके बारे में खेद है। मैं जल्द ही इस मुद्दे को सुधार दूंगा। इस मुद्दे को देखने के लिए समय निकालने के लिए धन्यवाद। –
आरजीबी आमतौर पर आरजीबीए के रूप में प्रतिनिधित्व किया जाता है। यह मंच के आधार पर अलग हो सकता है लेकिन आपको क्रमशः आर जी और बी के लिए प्रयास करना चाहिए (आरजीबीडी >> 24), >> 16, और >> 8। लेकिन चूंकि शायद यह समस्या नहीं है ... आप आर-जी-बी को एक दुर्लभ त्रि-आयामी अंतरिक्ष में प्राप्त करने की कोशिश कर रहे हैं। आप मानते हैं कि यह रंग अनपॅकिंग है जो गलत है, लेकिन क्या आप पूरी तरह से सुनिश्चित हैं कि यह ड्रॉइंग कोड या फ़ाइल I/O कोड नहीं है? –