2016-07-13 45 views
0

Ich versuche, konvertieren Entfernung von Meter zu Pixel in Ros-Knoten, mit Pcl-Bibliothek und Kinect-Xbox. Ich benutzte den folgenden Code, um auf euklidische Koordinaten jedes Punktes von kinect innerhalb des ros-Knotens zuzugreifen, der in Meter ist. Aber ich wollte diese Messungen in Pixeleinheit bekommen. Was soll ich machen?Konvertieren von Meter in Pixel-Einheit

void 
cloud_cb (const sensor_msgs::PointCloud2ConstPtr& input) 
{ 
pcl::PointCloud<pcl::PointXYZRGB> output; 
pcl::fromROSMsg(*input,output); 
for(int i=0;i<=400;i++) 
{ 
    for(int j=0;j<=400;j++) 
    { 
     p[i][j] = output.at(i,j); 
     ROS_INFO("\n p.z = %f \t p.x = %f \t p.y = %f",p[i][j].z,p[i][j].x,p[i][j].y); 
    } 
    } 
sensor_msgs::PointCloud2 cloud; 
pcl::toROSMsg(output,cloud); 
pub.publish (cloud); 
} 

Hier P [roh] [Spalte] a Point-Struktur ist, die die x, y enthält, z-Koordinaten-Wert in Meter, die ich in Pixeleinheit konvertiert werden soll. Wie ich sehe, ist der Wert der Pixeleinheit nicht konstant, so kann kein Wert in Google verwendet werden. Ich habe ähnliche Frage hier: Kinect depth conversion from mm to pixels, aber es hat keine Lösung.

+0

Nun, die x- und y-Daten müssen mit Trigonometrie abhängig von den z-Daten berechnet werden. Fragen Sie nach den trigonometrischen Methoden, um das Problem zu lösen? – Sean

Antwort

0

Es gibt ein Problem mit dem Versuch, Meter in Pixel zu konvertieren. Pixel sind keine Standardeinheit. Die physische Größe von 1 Pixel variiert auf verschiedenen Geräten je nach Bildschirmauflösung und Bildschirmgröße.

Wenn Sie die Auflösung des Bildschirms kennen, ist die Konvertierung immer noch nicht trivial.

const int L = 1920; //screen width 
const int H = 1280; //screen height 

for(int i=0;i<=L;i++){ 
    for(int j=0;j<=H;j++){ 
     p[i][j] = output.at(i*400/L,j*400/H); 
    } 
} 

Für jeden Pixel haben Sie also einen Tiefenwert, der dem Tiefenwert in der Karte entspricht. Dies wird einige int Umwandlung und Verbesserung benötigen.