【halcon】示例(1)——高速公路车道识别

示例:高速公路车道识别,涉及基本的区域操作和形态学操作。

*关闭halcon窗口的实时更新
dev_update_window ('off')

*关闭halcon图形窗口
dev_close_window ()

*打开图形窗口
*dev_open_window (窗口起始坐标Y, 窗口起始坐标X, 窗口宽度, 窗口高度, 背景颜色, 窗口句柄)
*这个窗口句柄就是窗口的名字,我们在一个程序或者软件中可能会打开好多个窗口(窗口1、窗口2、窗口。。。),
*现在我们希望在窗口5中显示一张图片,电脑怎么知道我们想显示在哪里呢?就是通过不同窗口的窗口句柄得到的。使用方法很简单,下面有显示的算子使用,用到了会说一下。
dev_open_window (0, 0, 768, 575, 'black', WindowID)

*halcon的赋值语句不是直接'='就OK了,要在'='前加一个':'
MinSize := 30

*获取halcon系统的信息
get_system ('init_new_image', Information)

*设置halcon系统的信息
set_system ('init_new_image', 'false')

*gen_grid_region 创建一个由线条或像素构成的区域。
*函数原型gen_grid_region(RegionGrid, RowSteps, ColumnSteps, Type, Width, Height)
*算子gen_grid_region创建由线(Type ='lines')或像素(Type ='points')构成的网格。在线的情况下,返回连续的线,如果'点'只有线的交叉点。
*从像素(0,0)到像素(高度-1,宽度-1)开始,网格在行方向上的步进宽度RowSteps和列方向上的ColumnSteps构建。在"行"模式下,RowSteps,ColumnSteps分别可以设置为零。在这种情况下,仅分别创建列,行。
gen_grid_region (Grid, MinSize, MinSize, 'lines', 512, 512)

*clip_region - 将区域剪切为矩形。
* clip_region(Region, RegionClipped, Row1,Column1,Row2,Column2)
* Region:要剪切的区域;RegionClipped:剪切完成的结果;Row1:起始Y;Column1:起始X;Row2:终止Y;Column2:终止X。
clip_region (Grid, StreetGrid, 130, 10, 450, 502)

*设置显示线宽
dev_set_line_width (3)

*设置显示线的颜色
dev_set_color ('green')

*读取图片
*read_image (读入图片命名, ‘路径’)
read_image (src, 'autobahn/scene_00')

*在窗口显示刚刚读入的图片
dev_display (src)

*停止程序,为了方便看一下读入图片
stop ()

*显示刚刚使用clip_region剪切过后的用gen_grid_region生成的网格
dev_display (StreetGrid)

stop ()

*halcon的for循环等同于
*for(i=0;i<28;i=i+1)
*{
*}
for i := 0 to 28 by 1
    read_image (src, 'autobahn/scene_' + (i$'02'))

*将图片与区域求交集,减少图片处理范围的大小,可以使程序运行速度变快
*reduce_domain (图片, 区域, 求交集后的图片)
reduce_domain (src, StreetGrid, Mask)

*sobel_amp - 使用Sobel算子检测边缘
sobel_amp (Mask, Gradient, 'sum_abs', 3)

*选取边缘检测后的像素值在20-255的区域
threshold (Gradient, Points, 20, 255)

*dilation_rectangle1 - 使用矩形结构元素扩展区域。
*膨胀操作
dilation_rectangle1 (Points, RegionDilation, MinSize, MinSize)

*将拓展后的区域与读入的原图求交集
*求膨胀区域和原图的交集
reduce_domain (src, RegionDilation, StripGray)

*选取像素值介于190-255的像素
threshold (StripGray, Strip, 190, 255)

*填充孔洞
fill_up (Strip, RegionFillUp)

*显示
dev_display (src)
dev_display (RegionFillUp)
endfor
dev_set_line_width (1)
dev_update_window ('on')

set_system ('init_new_image', Information)

运行结果: 

 

本示例最大的优点是使用网格与图像做交集从而进行快速的图像处理。

首先利用车的前视视角区域大致固定这一特性创建定义域。为了减少路面的干扰加快处理速度又使用网格对图像再进行一次压缩。在处理过程中采用了Sobel算子检测边缘,之后进行简单的阈值筛选得到边缘。得到边缘之后为了得到完整的白线的图像进行了对选中的边缘区域使用矩形元素进行膨胀,得到白线所在的区域。最后对区域进行简单的二值化筛选就OK啦,这是一个非常非常简单的例子,主要是处理思路慢慢学习的一个过程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值