此问题并非完全取决于point cloud library。相反,它是一个计算机图形问题。
鉴于包含球的场景的透视图,我们需要获得该球的边界框。请参阅下面的示例图 -
如果投射黄色球,则可以通过两个对角点s1
和s2
定义边界矩形。这些点的3D坐标由以下程序定义 -
x
,y
坐标
根据以上程序,我发现s1
和s2
的3D坐标如下所示。
Point s1: (0.774406, 0.295306, 2.703)
Point s2: ( 1.37865, 0.845276, 2.834)
通过比较s1
和s2
,定义了一个框并使用了addCube,但它不起作用。请参阅下面以不同摄像机角度拍摄的输出的两个屏幕截图 -
以下是代码段 -
double x_min = 0.774406, x_max = 1.37865;
double y_min = 0.295306, y_max = 0.845276;
double z_min = 0.2, z_max = 3.0;
pcl::visualization::PCLVisualizer viewer("Cloud Viewer");
viewer.setCameraParameters(camera);
viewer.addCube(x_min, x_max, y_min, y_max, z_min, z_max, 1, 0, 0, "bounding_box");
幸运的是,addCube函数有另一个定义,它提供了一种应用平移和旋转的方法。
我的问题是,使用这两个点,即s1
和s2
以及camera,如何定义转换,以便边界框包含球。
以下是下载所有必需文件的链接,以便运行项目 -
依赖关系:PCL 1.8