Halcon找圆系列(3)找金属表面的圆孔
发布日期:2021-06-30 18:07:08 浏览次数:2 分类:技术文章

本文共 2097 字,大约阅读时间需要 6 分钟。

我在Halcon学习网发了一个帖子:

请教工件的金属表面圆孔的识别与定位

 

解决方案有了,源码如下:

dev_update_off ()dev_close_window ()*读图像read_image (Image, 'D:/pic/202006042055044969.jpg')*彩色转灰度图count_channels (Image, Channels)if (Channels == 3)    rgb1_to_gray (Image, Image)*真彩色转灰度图elseif (Channels == 4)    decompose4 (Image, ImageR, ImageG, ImageB, ImageA)    compose3 (ImageR, ImageG, ImageB, MultiChannelImage)    rgb1_to_gray (MultiChannelImage, Image)endif*获取图像宽高get_image_size (Image, Width, Height)dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)set_display_font (WindowHandle, 16, 'mono', 'true', 'false')dev_display (Image)*动态二值化D := 30mean_image(Image, Mean, D*2+1, D*2+1)dyn_threshold(Image, Mean, Seg, 5, 'dark')fill_up(Seg, SegFillUp)connection(SegFillUp, segConnect)*找圆select_shape(segConnect, SelectedRegions, ['area','circularity'], 'and', [500, 0.7], [20000, 1])*求出最小外接圆的半径和中心点smallest_circle(SelectedRegions, Row, Column, Radius)*求出圆的面积和中心点area_center(SelectedRegions, Area, Row1, Column1)*画圆dev_display(Image)gen_circle(Circles, Row, Column, Radius)dev_display(Circles)*数量统计count_obj(SelectedRegions, Number)if (Number < 1)    disp_message (WindowHandle, '未找到', 'window', 12, 12, 'black', 'true')    return()endif*结果显示for i:=1 to Number by 1   select_obj (SelectedRegions, ObjectSelected, i)   r := Row[i - 1]   c := Column[i - 1]   rds:= Radius[i - 1]   disp_message (WindowHandle, '圆心:Row:'+ r + ' Col:' + c, 'window', 12, 12, 'black', 'true')    disp_message (WindowHandle, '半径:'+ rds, 'window', 52, 12, 'black', 'true')endforstop()

 

另外也可以尝试使用形状匹配,匹配之前进行一下预处理,可以让图像变化不那么明显,看上去更稳定一些。

Illuminate:图像照亮
EquHistoImage:直方图均衡化

*图像预处理/均衡Mask := 31illuminate (Image, Image, Mask, Mask, 0.7)equ_histo_image (Image, Image)*图像预处理/动态二值化D := 30mean_image(Image, Mean, D*2+1, D*2+1)dyn_threshold(Image, Mean, Seg, 5, 'dark')fill_up(Seg, SegFillUp)connection(SegFillUp, segConnect)*使用面积阈值,过滤掉一部分干扰物select_shape (segConnect, SelectedRegions, 'area', 'and', 3000, 10000)region_to_bin(SelectedRegions, Binary, 0, 255, Width, Height)Image := Binary

 

 

---

参考官方例程

smallest_circle.hdev

measure_ring.hdev
dyn_threshold.hdev
ball.hdev

 

转载地址:https://libaineu2004.blog.csdn.net/article/details/106671700 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:好教程推荐系列:简明Python教程/Python进阶/Think Python 2e/Python 黑魔法指南/PyCharm 中文指南
下一篇:好工具推荐系列:JetBrains Mono字体

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月08日 04时45分26秒