将米转换为像素单位
converting meter into pixel unit
我正在尝试使用 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] 是一个点结构,它包含以米为单位的 x、y、z 坐标值,我想将其转换为像素单位。如我所见,像素单位的值不是恒定的,因此不能使用 google 中找到的任何值。
我在这里遇到了类似的问题:Kinect depth conversion from mm to pixels,但没有解决方案。
尝试将米转换为像素时出现问题。像素不是标准单位。 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
转换和改进。
我正在尝试使用 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] 是一个点结构,它包含以米为单位的 x、y、z 坐标值,我想将其转换为像素单位。如我所见,像素单位的值不是恒定的,因此不能使用 google 中找到的任何值。 我在这里遇到了类似的问题:Kinect depth conversion from mm to pixels,但没有解决方案。
尝试将米转换为像素时出现问题。像素不是标准单位。 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
转换和改进。