HALCON示例程序forest.hdev识别森林中的树

HALCON示例程序forest.hdev识别森林中的树

示例程序源码(加注释)

  • 关于显示类函数解释
    dev_close_window ()
    dev_update_window (‘off’)
    read_image (Forest, ‘forest_air1’)
    get_image_size (Forest, Width, Height)
    dev_open_window (0, 0, Width, Height, ‘black’, WindowHandle)
    decompose3 (Forest, Red, Green, Blue)
    dev_display (Red)
  • 二值化
    threshold (Blue, BlueBright, 80, 255)
  • 分割连通域
    connection (BlueBright, BlueBrightConnection)
  • 通过面积进行区域筛选
    select_shape (BlueBrightConnection, Path, ‘area’, ‘and’, 100, 100000000)
    dev_set_color (‘red’)
    dev_set_draw (‘margin’)
    dev_display (Path)
    disp_continue_message (WindowHandle, ‘black’, ‘true’)
    stop ()
  • 二值化红色通道图像
    threshold (Red, RedBright, 120, 255)
  • 分割连通域
    connection (RedBright, RedBrightConnection)
  • 使用面积进行区域筛选
    select_shape (RedBrightConnection, RedBrightBig, ‘area’, ‘and’, 1500, 10000000)
  • 使用圆形元素进行闭运算
    closing_circle (RedBrightBig, RedBrightClosing, 7.5)
  • 使用圆形元素进行开运算
    opening_circle (RedBrightClosing, RedBrightOpening, 9.5)
  • 分割连通域
    connection (RedBrightOpening, RedBrightOpeningConnection)
  • 使用面积进行区域筛选
    select_shape (RedBrightOpeningConnection, BeechBig, ‘area’, ‘and’, 1000, 100000000)
  • 使用区域的平均灰度进行区域筛选
    select_gray (BeechBig, Blue, Beech, ‘mean’, ‘and’, 0, 59)
    dev_display (Red)
    dev_display (Beech)
    disp_continue_message (WindowHandle, ‘black’, ‘true’)
    stop ()
  • 联合区域
    union1 (Beech, BeechUnion)
  • 返回区域的补集
    complement (BeechUnion, NotBeech)
  • 求取两区域不相交部分
    difference (NotBeech, Path, NotBeechNotPath)
  • 缩小定义域
    reduce_domain (Red, NotBeechNotPath, NotBeechNotPathRed)
  • 二值化
    threshold (NotBeechNotPathRed, BrightRest, 150, 255)
  • 分割连通域
    connection (BrightRest, BrightRestConnection)
  • 通过面积筛选区域
    select_shape (BrightRestConnection, Meadow, ‘area’, ‘and’, 500, 1000000)
    dev_display (Red)
    dev_display (Meadow)
    disp_continue_message (WindowHandle, ‘black’, ‘true’)
    stop ()
  • 将两个对象合为一个对象
    union2 (Path, RedBrightClosing, BeechPath)
  • smooth_image - 使用各种滤镜平滑图像。
  • smooth_image(原图:平滑后的图像:滤波器,滤波参数:)
    smooth_image (Red, RedGauss, ‘gauss’, 4.0)
  • invert_image - 反转图像。
    invert_image (RedGauss, Invert)
  • watersheds - 从图像中提取流域和盆地。
  • watersheds (图片:盆地,流域::)
    watersheds (Invert, SpruceRed, Watersheds)
  • 通过面积与灰度进行区域筛选
    select_shape (SpruceRed, SpruceRedLarge, ‘area’, ‘and’, 100, 5000)
    select_gray (SpruceRedLarge, Red, SpruceRedInitial, ‘max’, ‘and’, 100, 200)
  • 生成一个空对象
    gen_empty_obj (LocalThresh)
  • 计算对象数量
    count_obj (SpruceRedInitial, NumSpruce)
    dev_update_var (‘off’)
    dev_update_pc (‘off’)
    for i := 1 to NumSpruce by 1
    • 在组员对象中选取指定对象
      select_obj (SpruceRedInitial, SingleSpruce, i)
    • 求取最大最小灰度值,当第三个参数设置为50时返回中值
      min_max_gray (SingleSpruce, Red, 50, Min, Max, Range)
    • 减少定义域
      reduce_domain (Red, SingleSpruce, SingleSpruceRed)
    • 二值化
      threshold (SingleSpruceRed, SingleSpruceBright, Min, 255)
    • 分割连通域
      connection (SingleSpruceBright, SingleSpruceBrightCon)
    • 选取最大面积的区域
      select_shape_std (SingleSpruceBrightCon, MaxAreaSpruce, ‘max_area’, 70)
    • 将多个区域合并到一个组员下,但不改变对象个数
      concat_obj (MaxAreaSpruce, LocalThresh, LocalThresh)

endfor

  • 开运算
    opening_circle (LocalThresh, FinalSpruce, 1.5)
    dev_set_line_width (2)
    dev_set_color (‘red’)
    dev_display (Red)
    dev_display (FinalSpruce)
    dev_set_color (‘green’)
    dev_display (Beech)
    dev_set_color (‘yellow’)
    dev_display (Meadow)

处理思路

这个例子是主要讲解了如何通过无人机拍摄的图像识别其中的对象。smooth_image 、watersheds 等算子被应用。

后记
大家有什么问题可以向我提问哈,我看到了第一时间回复,希望在学习的路上多多结交良师益友。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值