halcon算出豆子的数量

Halcon 中,全局阈值分割是一种常用的图像分割方法,用于将图像中的目标区域与背景区域分离。我们将用全局分割来识别和计算出豆子的数量.以下图为例:

dev_get_window (WindowHandle)//获取到当前窗口的控制权
read_image(Image,'pellets.png')
*使用全局阈值分割图像
*设置灰度值时可以借助灰度直方图
*适用于斑点筛选
*分割之后会把满足的区域整理成一个Region
threshold (Image, Regions, 124, 209)
*连通性,目的是把Region连接起来,(满足阈值的斑点很多,都是独立的,通过连通性把这些斑点正好到一起)
connection(Regions,ConnectedRegions)
*筛选:根据特征结合条件选出来想要的
*SelectedRegions属于筛选之后的图像变量,没运行或者结果不对都无法正确赋值
*筛选针对的是特征,可以借助特征直方图
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1000, 5000)
*圆形腐蚀:目的是为了让区域分开,原理是减少像素点,有可能会造成轮廓大小发生变化
erosion_circle(SelectedRegions,RegionErosion,5)
*由于腐蚀是单个进行的,所以RegionErosion中是多个独立的区域,还需要联通到一起,方便后续加工
connection (RegionErosion, ConnectedRegions1)
*由于腐蚀过程中损坏了原有的区域轮廓,需要还原原有轮廓的大小,通过膨胀算子,消除小物体平滑
*大物体的边界
dilation_circle (ConnectedRegions1, RegionDilation, 5)
*先侵蚀后膨胀属于形态学调整
dev_set_draw ('margin')
*把处理好的区域显示到Image上
dev_display(Image)
dev_display(RegionDilation)

*显示出来豆子的数量

*获取到之前膨胀区域的中心点(包含面积,x,y)
area_center (RegionDilation, Area, Row, Column)
*设置中心原点
*目的是为了在豆的中心标记一个+
gen_cross_contour_xld (Cross, Row, Column, 6, 0.785398)

*准备计数器:一个+ Number++
count_obj(Cross,Number)
*设置接下来要显示的颜色:这里类似于c#中的GDI,假如上面画笔是黑色,在这里改成粉色
dev_set_color('red')
*设置字号  2.字号  3.字体  4.是否加粗  5.是否倾斜
set_display_font (WindowHandle, 30, 'sans', 'true', 'false')
*设置显示的位置
set_tposition (WindowHandle, 10, 200)
write_string (WindowHandle, '豆数量'+Number)

思路:1.读取图片

        2.使用全局阈值分割进行斑点筛选

        3.连通之后进行特征筛选(面积)

        4.图形腐蚀

        5.膨胀

        6.显示文字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上位机_0x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值