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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月08日 04时45分26秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
JS中document对象和window对象有什么区别
2019-04-30
【python练习题】遍历1
2019-04-30
【matlab】显示图片且下方显示文字
2019-04-30
关于greater<int>以及类模板的一些理解
2019-04-30
对于时间复杂度的通俗理解
2019-04-30
如何输入多组数据并输出每组数据的和?
2019-04-30
基于CentOS 7的Linux常用命令行命令
2019-04-30
行阶梯型矩阵
2019-04-30
信号量机制
2019-04-30
临界资源与临界区
2019-04-30
matlab中uint8,double,im2double和im2uint8的区别
2019-04-30
数字图像处理总复习
2019-04-30
图像去噪(包含修正的阿尔法均值滤波及通用滤波方法代码)
2019-04-30
SVM进行人脸检测
2019-04-30
C++学习笔记
2019-04-30
图像处理学习笔记
2019-04-30
Machine Learning Onramp on MATLAB 学习笔记
2019-04-30
Machine Learning with MATLAB 1.1 to 2.2
2019-04-30
Learning DSP with MATLAB
2019-04-30
用MATLAB实现m序列的生成(MATLAB 2021a适用)
2019-04-30