MFC 打开与保存点云PCD文件

5 篇文章 0 订阅
1 篇文章 0 订阅

关键一句代码:

CFileDialog FileDlg(true, sDefaultDir, _T(""), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, sFileFilter, NULL);

CFileDialog 第一个参数为Ture时代表打开文件,为false时代表保存文件

添加点云数据之前,需要清空原有的数据

m_spViewer->removeAllPointClouds();

打开PCD,并显示于界面上的VTK窗口

void CPointCloud::PC_OpenPointCloud(boost::shared_ptr<pcl::visualization::PCLVisualizer>& m_spViewer,
	vtkRenderWindowInteractor* m_rwndinIren,
	vtkRenderWindow* m_rwndRenWin, CString& sFilePath)
{
	//打开文件*.pcd *.ply *.obj
	CString sDefaultDir = _T("请选择路径"); //设置默认打开文件夹
	CString sFileFilter = _T("文件(*.pcd;*.ply;*.obj)|*.pcd;*.ply;*.obj|All File (*.*)|*.*||"); //设置文件过滤
	CFileDialog FileDlg(true, sDefaultDir, _T(""), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, sFileFilter, NULL);
	//弹出选择文件对话框
	if (FileDlg.DoModal() == IDOK)
	{
		sFilePath = FileDlg.GetPathName();//得到完整的文件名和目录名拓展名  
		CString sFilename = FileDlg.GetFileName();
	}
	string sFile = CT2A(sFilePath.GetBuffer());   //CString格式转String格式
	//std::string sFilename = "huba_part.pcd";
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::io::loadPCDFile(sFile, *cloud);          //载入点云

	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> single_color(cloud, 255, 255, 255);	//设置点云颜色
    //初始化点云数据
	m_spViewer->removeAllPointClouds();
	//添加点云数据
	m_spViewer->addPointCloud<pcl::PointXYZ>(cloud, single_color, "sample cloud");
	m_spViewer->resetCamera();//使点云显示在屏幕中间,并绕中心操作
	m_rwndinIren->Render();
	m_rwndRenWin->Render();
}

保存PCD:

void CApplicationDlg::OnBnClickedSavefile()
{

	//保存文件*.pcd *.ply *.obj
	CString sDefaultDir = _T("请选择路径"); //设置默认打开文件夹
	CString sFileFilter = _T("文件(*.pcd;*.ply;*.obj)|*.pcd;*.ply;*.obj|All File (*.*)|*.*||"); //设置文件过滤
	CFileDialog FileDlg(false, sDefaultDir, _T(""), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, sFileFilter, NULL);
	CString filename;
	if (FileDlg.DoModal() != IDOK)
		 filename = FileDlg.GetPathName();

	bool binary = false;
	bool use_camera = true;
	int pos = filename.ReverseFind('.');
	if (pos == -1)
		return;

	CString ext = filename.Right(filename.GetLength() - pos);
	pcl::io::savePCDFileASCII(filename.GetString(), *CloudFull);
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值