上一篇的三维转换成二维图像应该说是三维点云投影到二维平面上,点云投影并不能达到项目要求,我们需要转换完成的二维图像可以看到每个点的深度,即用灰度图颜色的深浅来表是原点云数据的深度程度。
利用pcl库读取pcd点云文件,并结合opencv,将在三维中表示深度的z经过一定的变换得到图像中每个像素点的灰度值。
部分代码如下:
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
Image.at<cv::Vec3b>(i, j)[0] = (cloud->points[k].z / 12.13) * 255;
Image.at<cv::Vec3b>(i, j)[1] = (cloud->points[k].z / 12.13) * 255;
Image.at<cv::Vec3b>(i, j)[2] = (cloud->points[k].z / 12.13) * 255;
k++;
cout << k << endl;
}
}
转换完成的图像:
由图可以清楚的看清车头、车尾以及线缆的大体位置,与三维点云图可以对比一下:
得到二维图像,相比较处理三维点云,更加容易获取每个线缆的位置和尺寸。
虽然这些都是比较简单的处理操作,但是完成任务还是非常自豪的,学习带给我的满足感油然而生,继续加油!