将仪表转换为像素单位

时间:2016-07-13 16:38:14

标签: kinect pixel point-cloud-library ros

我正在尝试使用pcl库和kinect xbox将ros节点中的转换距离从米转换为像素。我使用下面的代码来访问ros节点内kinect的每个点的欧几里德坐标,以米为单位。但我想以像素为单位进行测量。我该怎么办?

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]是一个Point结构,它包含以米为单位的x,y,z坐标值,我想以像素为单位进行转换。因为我看到像素单位的值不是常数,所以不能使用谷歌中找到的任何值。 我在这里得到了类似的问题:Kinect depth conversion from mm to pixels,但它没有解决方案。

1 个答案:

答案 0 :(得分: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转换和改进。