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, []