研究生了但是之前对VS的相关了解只有创建简单的项目和对话窗,项目需要写MFC并添加算法,有一个问题:
激光相机的点云数据,采集之后想要将其打印用作标定厚度(实际是通过两个激光相机的3d返回值确定钢板的厚度值)。
源程序
cx::DeviceBuffer buffer = cam->waitForBuffer(10000);//采集数据到内存空间
auto rangeImg = buffer.getImage();
// optionally save range image to file
if (argc > 2)
rangeImg->save(argv[2]);
cx::c3d::PointCloud pc(rangeImg->height(), rangeImg->width(), CX_PF_COORD3D_ABC32f, cx::Point3f(1.0f, 1.0f, 1.0f), cx::Point3f(0.0f, 0.0f, 0.0f));//CX_PF_COORD3D_ABC32f 表示坐标像素(如果是笛卡尔坐标系XYZ元组),每个相应值32位浮点
其中pc的类型PointCloud定义为
class PointCloud
{
public:
typedef std::shared_ptr<PointCloud> Ptr;
PointCloud() : points(), normals(), colors(), scale(1.0f, 1.0f, 1.0f), offset(0.0f, 0.0f, 0.0f) {}
PointCloud(unsigned int h, unsigned int w, unsigned int pf = CX_PF_COORD3D_ABC32f, const cx::Point3f s = cx::Point3f(1.0f, 1.0f, 1.0f), const cx::Point3f o = cx::Point3f(0.0f, 0.0f, 0.0f)) : points(h, w, pf), normals(), colors(), scale(s), offset(o) {}
~PointCloud() {}
bool hasPoints() const {
return points.size() > 0;
}
bool hasNormals() const {
return points.size() > 0 && normals.size() == points.size();
}
bool hasColors() const {
return points.size() > 0 && colors.size() == points.size();
}
有一个疑惑,就是想知道怎样可以将我采集到的三维数据从pc处打印或者读取出来;亦或者从内存空间直接读取出来,因为后续的标定需要依据数据进行,但是我现在都不知道我的数据内容是什么。