You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Halcon中为图像绘制3D方向箭头以展示点云朝向?

在Halcon中渲染点云时添加小型3D方向箭头的实用方案

给你几个直接可行的思路,不用纠结2D箭头的像素叠加问题:

1. 自定义小型3D箭头模型,和点云合并渲染

手动创建迷你箭头的3D顶点数据,生成独立的3D对象模型,旋转到和点云一致的朝向,再和点云模型合并后一起渲染,完美适配点云的视角。

示例代码:

* 定义小型箭头的3D顶点(杆+箭头头部)
ArrowPoints := [0,0,0,  0.5,0,0,  0.4,0.1,0,  0.5,0,0,  0.4,-0.1,0]
gen_object_model_3d_from_points(ArrowPoints, [], [], ArrowModel)

* 按点云绕Z轴的旋转角Theta旋转箭头
Theta := 30 * rad(1)  // 替换为你的实际旋转角度
hom_mat3d_identity(HomMat3DIdentity)
hom_mat3d_rotate(HomMat3DIdentity, Theta, 'z', 0,0,0, HomMat3DRotate)
affine_trans_object_model_3d(ArrowModel, HomMat3DRotate, ArrowModelRotated)

* 合并点云模型(替换成你的点云对象名)和箭头模型
concat_object_model_3d([PointCloudModel, ArrowModelRotated], CombinedModel)

* 一起渲染,箭头用红色区分
render_object_model_3d(WindowHandle, CombinedModel, CamParam, Pose, ['color'], ['red'])

2. 用disp_arrow_3d()直接绘制(Halcon版本支持的话)

如果你的Halcon版本有这个函数,直接用它在3D窗口里画小型箭头,指定起点、终点、大小就行,不用折腾模型合并。

示例代码:

* 假设已算出点云中心CenterX/CenterY/CenterZ,以及绕Z轴的旋转角Theta
DirX := cos(Theta)
DirY := sin(Theta)
DirZ := 0

* 设置箭头起点(点云中心附近)和终点(缩放因子0.2控制大小)
StartX := CenterX
StartY := CenterY
StartZ := CenterZ
EndX := StartX + DirX * 0.2
EndY := StartY + DirY * 0.2
EndZ := StartZ + DirZ * 0.2

* 绘制小型3D箭头,最后一个参数控制箭头头部大小
disp_arrow_3d(WindowHandle, StartX, StartY, StartZ, EndX, EndY, EndZ, 'red', 0.05)

3. 改进2D箭头的绘制方式(如果非要用2D)

别用add_image(),改成先生成旋转后的箭头XLD,再把XLD绘制到点云渲染后的图像上,这样能精准控制箭头位置和样式,不会出现像素叠加的问题。

示例代码:

* 生成箭头轮廓XLD
gen_arrow_contour_xld(ArrowXLD, 10,10, 50,10, 5,5)
* 绕中心旋转箭头(Theta是点云的Z轴旋转角)
hom_mat2d_identity(HomMat2DIdentity)
hom_mat2d_rotate(HomMat2DIdentity, Theta, 30,30, HomMat2DRotate)
affine_trans_contour_xld(ArrowXLD, ArrowXLDrot, HomMat2DRotate)
* 把旋转后的箭头绘制到点云图像上
paint_xld(ArrowXLDrot, PointCloudImage, PointCloudImageWithArrow, 'red', 1)

内容的提问来源于stack exchange,提问作者Malinko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 17:58:18