问题
在用这个管程部分的时候,假设只求一张图片的相机外参,导出的found_pose_centers.ply 打开没有meshlab里的圈,也看不见任何的点。
省时间
右键记事本打开found_pose_centers.ply文件
ply
format ascii 1.0
element vertex 1
property double x
property double y
property double z
property uchar diffuse_red
property uchar diffuse_green
property uchar diffuse_blue
end_header
0.5966909686033824 0.0017583648858339 0.0159886514291254 255 255 255
把element vertex 1 改成 2 意思是即为两个点
最后加一行 0 0 0 255 255 255 意思是第二个点的坐标与颜色
保存打开就行
右边的三个箭头即为了好看而已。
详细一点的解释
就是meshlab至少要两个点,如果你有注意到我们的sfm_data_expanded.ply
里面打开可能除了头文件都是乱码
这个时候容易产生错误的思路,比如是不是编码问题, meshlab的问题,或者是代码的问题 等。
因为openMVG毕竟是个比较完美的项目了,所以应该不存在编码导致打不开这种问题(看了看代码
meshlab也比较完美了(别的工具又要装环境
代码的问题 我也仔细调试了一下(…
所以还是从最基本的问题上思考,ply文件是啥,header又是啥的问题 ,从meshlab贴吧帖子看分析了属性的含义。 以及一个可能的设想,单个点的坐标真的有意义吗?
代码部分
std::cout << " Total poses found : " << vec_found_poses.size() << "/" << total_num_images << std::endl;
// Export the found camera position in a ply.
const std::string out_file_name = stlplus::create_filespec(sOutDir, "found_pose_centers", "ply");
plyHelper::exportToPly(vec_found_poses, out_file_name);
// Export found camera poses along with original reconstruction in a new sfm_data file
ESfM_Data flag_save;
if (bExportStructure)
{
flag_save = ESfM_Data(ALL);
}
else
{
flag_save = ESfM_Data(VIEWS|INTRINSICS|EXTRINSICS);
}
if (!Save(
sfm_data,
stlplus::create_filespec( sOutDir, "sfm_data_expanded.json" ).c_str(),
flag_save))
{
return EXIT_FAILURE;
}
// export also as ply
if (!Save(
sfm_data,
stlplus::create_filespec( sOutDir, "sfm_data_expanded.ply" ).c_str(),
ESfM_Data(ALL)))
{
return EXIT_FAILURE;
}
实际上之前是有多视图查找,与单视图查找两个模块的,后来被合并到一个模块也就是localization了,这个可以在github的issue找打。
以上。希望能节省你的时间。