2016-07-13 12 views
0

私は、pclライブラリとkinect xboxを使って、rosノードのメーターからピクセルへの変換距離を変換しようとしています。私は以下のコードを使用して、キロメートル内にあるkinノード内のすべてのポイントのユークリッド座標にアクセスしました。しかし、私はピクセル単位でこの測定値を取得したかったのです。私は何をすべきか?ここピクセル単位に変換する

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); 
} 

P [RAW] [COL] Xが含まれているポイント構造であり、Y、Z iは画素単位で変換したい、メーターの値を調整します。ピクセル単位の値が一定でないことがわかるので、グッドで使用されている値は使用できません。 私はここでも同様の質問があります:Kinect depth conversion from mm to pixelsですが、解決策はありません。

+0

まあ、xデータとyデータは、zデータに依存して三角法を使って計算する必要があります。それはあなたの求めることがそれを解決する三角法ですか? – Sean

答えて

0

メーターをピクセルに変換しようとすると問題が発生します。ピクセルは標準単位ではありません。 1ピクセルの物理的なサイズは、画面の解像度と画面のサイズによって、デバイスによって異なります。

画面の解像度が分かっていれば、変換はそれほど重要ではありません。

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); 
    } 
} 

このように、すべてのピクセルについて、マップの奥行き値に対応する奥行き値があります。これには、変換と改善が必要です。int

関連する問題