Halcon找圆系列(3)找金属表面的圆孔
我在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)找金属表面的圆孔相关推荐
- Halcon找圆系列(4)测量圆直径/半径的方法之暴力拟合法 vs 测量工具法
今天要给大家分享一点关于Halcon测量圆直径(半径)的方法. 首先容我啰嗦两句:之所以要对这个看似很基础的问题进行探讨,主要原因有二,其一是这个问题确实困扰了我一段时间,当然这主要是由于我自己经验不 ...
- Halcon中的测量工具(找边找圆等)——Metrology系列
Halcon中的测量工具(找边找圆等)--Metrology系列 1. Halcon中的工具助手 对于使用Halcon的小伙伴们来说,在菜单栏上的"助手"一栏中可以找到一些可以快捷 ...
- OpenCV找圆系列(2)HoughCircles算子新增了HOUGH_GRADIENT_ALT方法,效果好多了
自OpenCV 4.3.0版本,imgproc模块的HoughCircles()函数,新增加了检测算法HOUGH_GRADIENT_ALT,精度得到了很大的提升. 1.举例opencv v4.5.5版 ...
- openmv4系列7----寻找色块
openmv4系列7----寻找色块 1.find_blobs函数 image.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, inv ...
- 创新方法系列 如何找联系 符号化就是找数学中的等于==关系,遇到等号请留意
创新离不开观察力 思考力 想象力三大力的支撑 找联系是科学中三大基本能力 观察力 思考力 想象力 中的最重要的观察力的体现, 创新方法系列 如何找联系 符号化就是找数学中的等于==关 ...
- import 别名_Python基础找茬系列09--import和from-import的引用区别
一.语法区别 二.两种导包在内存上的区别 一图看懂import与from-import的区别 无论是使用import隐式导包还是form-import显示导包,整个模块都会被加载到内存中 例如:fro ...
- python变量后面加星号_Python基础找茬系列20--python函数的秘密
一.小试牛刀 二.函数的定义 def 函数名(参数列表): 函数体 [1]函数的关键词:是def,不是del,也不是function [2]函数的名称:不能使用关键词作为函数的名称,允许使用内置函数名 ...
- 最少硬币找零系列问题(01背包,完全背包,多重背包动态规划)
背包问题思路解决最小硬币找零系列问题. 一.01硬币找零问题(01背包) 给定不同面额的硬币 coins 和总金额 m.每个硬币最多选择一次.计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬 ...
- 全球网脑系列丛书找出版合作
全球网脑系列丛书找出版合作 高路13522751250 尊敬的出版界/图书界/文化公司朋友,您好: 您想重演<哈利波特>的魔法术吗?您想掀起类似<长尾理论>.<小趋势&g ...
最新文章
- MultipartResolver实现文件上传功能
- NOIp 图论算法专题总结 (1):最短路、最小生成树、最近公共祖先
- python字符串写入excel-Python向excel中写入数据的方法
- JavaScript面向对象中的严格模式
- 什么是元宇宙?为何要关注它?
- 面向对象的继承关系体现在数据结构上时,如何表示
- 为什么 Netflix “永不宕机”?
- 报警服务器物理内存,服务器内存使用率优化
- Java单例模式实现(线程安全)
- sublime python快捷键
- mpp格式文用什么软件打开
- Python实现图像的全景拼接
- SQL Server 中“dbo”到底是什么
- oracle 10g、11g、 12c、19c有什么区别
- 黑科技知识:需要登录才能访问的网站如何破解?仅仅只需 3 步!
- 京东商品数据分析,教你一键分析数据
- 不一样的【青椒炒蛋】—36道超人气家常菜
- 七牛数据处理再添新兵——图片瘦身
- 惊呆了!难道还有这么云盘的软件???再也不怕视频被和谐了!!
- 如何入门现代控制理论