开启左侧

[HALCON算子] halcon外部算子封装以及调用

[复制链接]
Criss 发表于 2016-5-21 14:57:17 | 显示全部楼层 |阅读模式
外部算子和halcon自带算子功能类似,充当一个功能的集合。

以《工业级视觉实用教程》中的gen_line为例子,首先把所有的源代码输入main函数窗口
  1. *关闭更新
  2. dev_update_off ( )
  3. *判断直线线段长度是否有效
  4. if(Length<1)
  5.     return()
  6. endif

  7. *根据直线类型产生相应的图形对象
  8. if(RegionOrXLD='region')
  9.     *产生区域图像
  10.     gen_region_line (LineTemp, 0, 0, 0, Length-1)
  11. else
  12.     *产生轮廓图形图像
  13.     gen_contour_polygon_xld (LineTemp, [0,0], [0,Length-1])
  14. endif

  15. *求仿射变换矩阵
  16. vector_angle_to_rigid (0, 0 ,0 , Row, Col, -Angle, HomMat2D)
  17. *根据仿射变换矩阵取结果图形对象
  18. if(RegionOrXLD='region')
  19.     affine_trans_region (LineTemp, Line, HomMat2D, 'false')
  20. else
  21.     affine_trans_contour_xld (LineTemp, Line, HomMat2D)
  22. endif

  23. *打开更新
  24. dev_update_on ( )

  25. return ()
复制代码
最后的return()可以不用输入,当你创建外部函数的时候会自动添加。

选中所有代码然后右键“创建新函数”在打开的界面“创建函数”参照以下内容:
QQ截图20160521145210.png
这部分只需要输入5个控制变量即可获取最终的Line图像变量。

调用:
  1. gen_line (Line, 200, 100, rad(90),100,  'region')
复制代码
参数
Line (output_object)
object → object
输出图像变量:Line
Row (input_control)
integer → (tuple)
直线的Row坐标
Col (input_control)
integer → (tuple)
直线的Col坐标
Angle (input_control)
number → (tuple)
直线的Angle角度
Length (input_control)
number → (tuple)
直线的长度
RegionOrXLD (input_control)
string → (tuple)
是生成Region类型还是xld类型的线,里面只判断了region其他都是xld
Default Value: 'region'

ps:
删除外部算子
过程->外部过程设置->外部函数 找到需要删除的外部函数,右键“删除选中的函数文件”!
当然也可以到保存的目录下去删除对应名称的文件也是可以的。。。

如果该选项为灰色不可选择,请在函数窗口里对你的算子进行编辑,取消"本地"选项,单独保存到其他目录下然后进行加载!


您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表