halcon深度图转点云

 参数主要在于cx,cy和f

公式主要是:

X = (u - cx) * Z / f
Y = (v - cy) * Z / f

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)


zResoulution := 0.1
cx := 359.374
cy := 328.806
f := 976.321

open_framegrabber ('3DCamera', 0, 0, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'A2110046366E00D33 Z16 (960x600) ', 'A2310192366E10D33', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
while (true)
    grab_image_async (Image, AcqHandle, -1)
    
    * Calutlate Z
    convert_image_type(Image, Z, 'real')
    scale_image(Z, Z, zResoulution, 0)

    * Calutlate X and Y
    * X = (u - cx) * Z / f
    * Y = (v - cy) * Z / f
    * u is the pixel index of x coord(Width coord), counted from 0
    * v is the pixel idnex of y coord(Height coord), counted from 0
    get_image_size(Image, w, h)
    
    * Generate u Map
    gen_image_surface_first_order(u, 'real', 0, 1, 0, 0, 0, w, h)
    * Generate v Map
    gen_image_surface_first_order(v, 'real', 1, 0, 0, 0, 0, w, h)
    
    scale_image(u, X, 1, -cx)
    scale_image(v, Y, 1, -cy)
    
    mult_image(X, Z, X, 1/f, 0)
    mult_image(Y, Z, Y, 1/f, 0)
    
    xyz_to_object_model_3d(X, Y, Z, PointCloud)
    write_object_model_3d(PointCloud, 'ply', 'test.ply', [], 0)
    visualize_object_model_3d (WindowHandle, PointCloud, [], [], [], [], [], [], [], PoseOut)
endwhile
close_framegrabber (AcqHandle)

你可能感兴趣的:(开发语言)