c++ - PCL 更改起始相机位置
问题描述
我正在尝试使用 PCL 库(我是新手)从从文件中获取的无组织点云中获取图像,该.las
文件随后被转换为.pcd
供 PCL 库使用的文件。为了可视化点云,我使用了此处的示例代码:https ://github.com/UnaNancyOwen/Tutorials/blob/master/tutorials/range_image_border_extraction/range_image_border_extraction.cpp
对于我.las
使用https://github.com/murtiad/las2pcd.pcd
默认情况下相机位置不正确(我需要用鼠标与可视化器交互才能达到正确的位置)但质量是正确的,我可以使用该saveScreenshot
方法转储照片。
我会很感激任何建议,我正在运行 Ubuntu 18.04 和pcl 1.8
. 还浏览了我在 pcl-users.org 上找到的每个示例和现有帖子。我已经尝试过 OpenCV,但据我所知,它的质量对于无组织的点云并不好。
我面临的情况是:
一个。如果我通过调用这些函数中的任何一个(或全部)来修改最轻微的相机参数,质量就会下降并且看起来好像没有焦点:
pcl::visualization::PCLVisualizer viewer ("3D Viewer");
viewer.setBackgroundColor (1, 1, 1);
viewer.addCoordinateSystem (1.0f, "reference");
/* Evil functions */
viewer.initCameraParameters();
viewer.setCameraPosition(0, -30, 0, 0, 0, 0, 0, 0, 1);
viewer.setCameraFieldOfView(0.523599);
viewer.setCameraClipDistances(0.00522511, 50);
湾。如果我不修改任何参数,质量仍然存在,但我需要与我打算避免的鼠标进行交互。
C。即使在与鼠标交互并修改视图之后,相机参数仍然保持不变(实际使用循环PCL 上的这篇帖子:Visualize a point cloud):
viewer.getCameras(cam);
//--------------------
// -----Main loop-----
//--------------------
while (!viewer.wasStopped()) {
// range_image_borders_widget->spinOnce ();
viewer.spinOnce();
pcl_sleep(0.5);
cout << "Cam: " << endl
<< " - pos: (" << cam[0].pos[0] << ", " << cam[0].pos[1] << ", " << cam[0].pos[2] << ")" << endl
<< " - view: (" << cam[0].view[0] << ", " << cam[0].view[1] << ", " << cam[0].view[2] << ")" << endl
<< " - focal: (" << cam[0].focal[0] << ", " << cam[0].focal[1] << ", " << cam[0].focal[2] << ")" << endl
<< " - fovy: (" << cam[0].fovy << " - clip: (" << cam[0].clip[0] << " , " << cam[0].clip[1] << ")" << endl;
}
解决方案
问题是将相机定位为 180º,并具有有序的点云,这导致高度 = 1,并且从两个角度实际上颜色和形状相同。
有效地将“邪恶代码”修改为以下代码,“修复了问题”:
viewer.initCameraParameters();
viewer.setCameraPosition(0, 30, 0, 0, 0, 0, 0, 0, 1);
viewer.setCameraFieldOfView(0.523599);
viewer.setCameraClipDistances(0.00522511, 50);
推荐阅读
- python - 使用 Python C 扩展模块,显示带有“外部”前缀而不是“内部”前缀的类型,而不会破坏酸洗
- php - 检索到的 JSON 数据未解码为 xcode 12 中的自定义结构
- javascript - 如何使用 javascript 保存输入数据表单避免安全内容策略-Chrome 扩展
- javascript - 当“电子邮件”字段有效时,如何启用我的按钮?
- python - 我该如何解决这个 MemoryError?
- python - Python for 循环错误“索引超出范围”
- google-bigquery - 语法错误:预期输入结束,但在
- google-chrome - 隐藏或保护工作表中的脚本
- sqlalchemy - 有没有办法在某个模型的所有 sqlalchemy 查询中强制进行过滤?
- c - 这是将 struct/int/float... 类型传递给 memcpy 以在 char 数据区域上复制的合法用途吗?