VS2010 MFC 使用vtk 显示 点云数据

这篇博客介绍了如何在VS2010环境下,使用MFC结合PCL1.6.0和VTK库显示3D点云。主要步骤包括创建MFC工程,配置PCL属性,定义头文件和成员变量,以及在cpp文件中进行初始化和交互操作。在实现过程中遇到了关于`new`的冲突问题和`std::numeric_limits<int>::max()`的错误,通过修改源代码解决了这些问题。此外,还分享了参考链接和代码资源。

1. 仅下载了pcl1.6.0  然后点击安装  

2.借助mfc 使用pcl自带的vtk进行显示

具体步骤:

1.创建mfc基于对话框的工程,配置pcl的属性

2. 头文件中定义如下:

#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_cloud.h> 
#include <boost/thread/thread.hpp>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/visualization/pcl_visualizer.h>  


#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
using namespace std;
using namespace pcl;




private:
	//视图窗口
	vtkSmartPointer<vtkRenderWindow> m_win;
	vtkSmartPointer<vtkRenderWindowInteractor> m_iren;
	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;

 

3.cpp中 

 

首先将屏蔽掉 ,不屏蔽的话,会有关于new 的冲突


//#ifdef _DEBUG
//#define new DEBUG_NEW
//#endif

其次:

构造函数处:进行变量初始化

    

  viewer = boost::shared_ptr<pcl::visualization::PCLVisualizer>(new pcl::visualization::PCLVisualizer("3D Viewer", false));

OnInitDialog函数中:

//==========================将viewer窗口结合到MFC图像控件上===========================
	CRect rect;
	m_iren = vtkRenderWindowInteractor::New();//重新申请地址
	m_win = viewer->getRenderWindow();//获取viewer的句柄
	GetDlgItem(IDC_SHOWVTK_STATIC)->GetClientRect(&rect);//获取图像控件的实际大小
	m_win->SetSize(rect.right - rect.left, rect.bottom - rect.top);//将viewer大小设置为图像控件大小
	m_win->SetParentId(GetDlgItem(IDC_SHOWVTK_STATIC)->m_hWnd);//将vtk窗口结合到MFC窗口中
	viewer->resetCamera();
	m_iren->SetRenderWindow(m_win);
	viewer->createInteractor();//由于初始化设置为false,该处重新创建PCL风格的Interactor
	m_win->Render();
	//==============

添加一个按钮,进行响应加载pcd

pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGBA>);
	pcl::io::loadPCDFile("11.pcd", *cloud);
	viewer->addPointCloud(cloud);

 

遇到的问题:

1. pcd_io.h 的头文件 中 const int nr_points = std::numeric_limits<int>::max ());  提示  应输入标识符

改为:max处加了一个() 同理处理 min函数

const int nr_points = (std::numeric_limits<int>::max) ());

2.correspondence.h的类中添加如下头文件

#ifdef max 
#undef max 
#endif 

 

参考:

https://blog.csdn.net/gordon_wei/article/details/85236064

例子:

https://blog.csdn.net/weixin_43341380/article/details/93972717

 

本文的代码:  使用vs2010开发,用vs2017打开的,未升级版本

我的代码:

https://mp.csdn.net/console/uploadResources?spm=1003.2018.3001.4314

 

编译目录写入文本

cmd控制台遍历目录文件名批量写入TXT

https://www.cnblogs.com/MorganMa/p/13958783.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值