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

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

http://www.ihalcon.com/read-15016-1.html

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

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 := 30
mean_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 1select_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 := 31
illuminate (Image, Image, Mask, Mask, 0.7)
equ_histo_image (Image, Image)*图像预处理/动态二值化
D := 30
mean_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

Halcon找圆系列(3)找金属表面的圆孔相关推荐

  1. Halcon找圆系列(4)测量圆直径/半径的方法之暴力拟合法 vs 测量工具法

    今天要给大家分享一点关于Halcon测量圆直径(半径)的方法. 首先容我啰嗦两句:之所以要对这个看似很基础的问题进行探讨,主要原因有二,其一是这个问题确实困扰了我一段时间,当然这主要是由于我自己经验不 ...

  2. Halcon中的测量工具(找边找圆等)——Metrology系列

    Halcon中的测量工具(找边找圆等)--Metrology系列 1. Halcon中的工具助手 对于使用Halcon的小伙伴们来说,在菜单栏上的"助手"一栏中可以找到一些可以快捷 ...

  3. OpenCV找圆系列(2)HoughCircles算子新增了HOUGH_GRADIENT_ALT方法,效果好多了

    自OpenCV 4.3.0版本,imgproc模块的HoughCircles()函数,新增加了检测算法HOUGH_GRADIENT_ALT,精度得到了很大的提升. 1.举例opencv v4.5.5版 ...

  4. openmv4系列7----寻找色块

    openmv4系列7----寻找色块 1.find_blobs函数 image.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, inv ...

  5. 创新方法系列 如何找联系 符号化就是找数学中的等于==关系,遇到等号请留意

    创新离不开观察力   思考力  想象力三大力的支撑 找联系是科学中三大基本能力  观察力   思考力  想象力  中的最重要的观察力的体现, 创新方法系列  如何找联系 符号化就是找数学中的等于==关 ...

  6. import 别名_Python基础找茬系列09--import和from-import的引用区别

    一.语法区别 二.两种导包在内存上的区别 一图看懂import与from-import的区别 无论是使用import隐式导包还是form-import显示导包,整个模块都会被加载到内存中 例如:fro ...

  7. python变量后面加星号_Python基础找茬系列20--python函数的秘密

    一.小试牛刀 二.函数的定义 def 函数名(参数列表): 函数体 [1]函数的关键词:是def,不是del,也不是function [2]函数的名称:不能使用关键词作为函数的名称,允许使用内置函数名 ...

  8. 最少硬币找零系列问题(01背包,完全背包,多重背包动态规划)

    背包问题思路解决最小硬币找零系列问题. 一.01硬币找零问题(01背包) 给定不同面额的硬币 coins 和总金额 m.每个硬币最多选择一次.计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬 ...

  9. 全球网脑系列丛书找出版合作

    全球网脑系列丛书找出版合作 高路13522751250 尊敬的出版界/图书界/文化公司朋友,您好: 您想重演<哈利波特>的魔法术吗?您想掀起类似<长尾理论>.<小趋势&g ...

最新文章

  1. MultipartResolver实现文件上传功能
  2. NOIp 图论算法专题总结 (1):最短路、最小生成树、最近公共祖先
  3. python字符串写入excel-Python向excel中写入数据的方法
  4. JavaScript面向对象中的严格模式
  5. 什么是元宇宙?为何要关注它?
  6. 面向对象的继承关系体现在数据结构上时,如何表示
  7. 为什么 Netflix “永不宕机”?
  8. 报警服务器物理内存,服务器内存使用率优化
  9. Java单例模式实现(线程安全)
  10. sublime python快捷键
  11. mpp格式文用什么软件打开
  12. Python实现图像的全景拼接
  13. SQL Server 中“dbo”到底是什么
  14. oracle 10g、11g、 12c、19c有什么区别
  15. 黑科技知识:需要登录才能访问的网站如何破解?仅仅只需 3 步!
  16. 京东商品数据分析,教你一键分析数据
  17. 不一样的【青椒炒蛋】—36道超人气家常菜
  18. 七牛数据处理再添新兵——图片瘦身
  19. 惊呆了!难道还有这么云盘的软件???再也不怕视频被和谐了!!
  20. 如何入门现代控制理论

热门文章

  1. perl 产生随机数
  2. 红光光浴只有流汗的效果?#红光光浴#种光光学
  3. oracle修改数据库用户名密码,怎样修改oracle数据库的用户名密码
  4. matlab的三维矩阵含义
  5. 一步一步实现微信抢红包
  6. python3集合_python3集合练习(set)
  7. jsp快递信息管理系统
  8. 贴吧无耻霸屏技术! 几万阅读量的微信公众号都偷偷的使用它
  9. 构建和管理有效API市场的关键步骤
  10. 罗技GHUB打开一直在加载怎么回事?