欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

根据三维空间坐标点如何构建三维模型

程序员文章站 2022-04-03 23:19:55
...

1.Halcon 算子:xyz_to_object_model_3d

功能:将含有三维空间坐标的图像(数值矩阵)生成一个三维模型,输入的图像为三维空间坐标点的X、Y、Z图像
xyz_to_object_model_3d (ImageX, ImageY, ImageZ, model)
ImageX:含有物体三维空间中的X坐标信息
ImageY:含有物体三维空间中的Y坐标信息
ImageZ:含有物体三维空间中的Z坐标信息

2.OpenCV生成XYZ图像

XYZ图像:实际上是以图像的形式存储的二维矩阵

定义32位Mat类型图像,初始化为0

	Mat xImg, yImg, zImg;
	xImg= Mat::zeros(height, width, CV_32FC1);
	yImg= Mat::zeros(height, width,CV_32FC1);
	zImg= Mat::zeros(height, width, CV_32FC1);

循环遍历像素,判断二维坐标中该点位置实际对应的三维空间坐标点是否存在,若存在则取出三维空间坐标点的x、y、z值,分别赋值给 xImg, yImg, zImg

	for (int i = 0; i < height; i++)
	{
	    //注:pt为三维空间坐标点对象
		float *r = xImg.ptr<float>(i);
		float *g = yImg.ptr<float>(i);
		float *b = zImg.ptr<float>(i);
		for (int j = 0; j < width; j++)
		{
		  // 取出2D图像位置(i,j)对应的点云
			float x, y, z;
			float cr, cg, cb;
			x = pt->x;
			y = pt->y;
			z = pt->z;
	
			if (fabs(x - 0.0) < FLT_EPSILON && fabs(y - 0.0) < FLT_EPSILON && fabs(z - 0.0) < FLT_EPSILON) // 判断当前2D图像位置是否有点云
			{
				//情况1:当前(i,j)位置没有点云
			}
			else
			{
				//情况2:当前(i,j)位置有点云,取出点云信息
				cnt++;
				r[j] = x ;
				g[j] = y;
				b[j] = z;
			}
		}
	}

3.保存的XYZ图像

4.调用Halcon算子,生成三维模型并显示

xyz_to_object_model_3d (Image1, Image2, Image3, model)
visualize_object_model_3d (WindowHandle, model, []
相关标签: OpenCV Halcon