提示:若没有查找的算子,可以评论区留言,会尽快更新
Halcon算子应用和技巧7
前言
提示:可以使用搜索小工具搜索对应算子名称:
本篇博文主要用于记录学习Halcon中算子的应用场景,及其使用代码和图像展示。只讲通俗易懂使用方法,不讲原理,不讲原理,不讲原理,重要的事情说三遍。
提示:以下是本篇文章正文内容,下面案例可供参考,注意参数坐标的使用,能帮助你理解算子
一、Halcon应用?
Halcon 是一个强大的图像处理工具,该工具是为了解决机器视觉项目任务而创建的。
二、算子汇总
每一博文仅展示10个算子,点击此链接进行查询所有算子,并点击对应算子跳转相应博文。'
【跳转链接】
三、应用算子
61. gen_ellipse_contour_xld()
61.1. gen_rectangle2_contour_xld()
61.2. gen_arrow_contour_xld()
先上代码:
read_image (Image, 'D:/HALCON_learn/理论/51-60/瓶盖.jpg')
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
gen_image_proto (Image, ImageCleared, 125)
*生成椭圆轮廓
draw_ellipse(WindowHandle, Row, Column, Phi, Radius1, Radius2)
gen_ellipse_contour_xld(ContEllipse, Row, Column, Phi, Radius1, Radius2, 0, rad(360), 'positive', 1.5)
*生成矩形轮廓
draw_rectangle2(WindowHandle, Row1, Column1, Phi1, Length1, Length2)
gen_rectangle2_contour_xld (Rectangle, Row1, Column1, Phi1, Length1, Length2)
get_contour_xld(Rectangle, Row2, Col)
*生成线/箭头轮廓
draw_line (WindowHandle, Row11, Column11, Row21, Column2)
gen_arrow_contour_xld(Arrow, Row11, Column11, Row21, Column2, 15, 15)
解析
这几个算子均是生成常规形状轮廓
PS:生成箭头需要两端位置,所以先绘制线,至于箭头大小和形状可以通过最后两个参数设置,最后两个参数内部参数实现是矩形框宽和高
62. gen_contour_polygon_xld()
先上代码:
row1 := [210,294,267,210]
clo1 := [241,243,315,241]
gen_contour_polygon_xld(Contour, row1, clo1)
解析
生成多边形轮廓
PS:注意要想生成闭合的轮廓,最后一个参数需要和第一个参数一致,才能形成闭合的轮廓
63. gen_contours_skeleton_xld()
先上代码:
read_image (Image, 'D:/HALCON_learn/理论/51-60/瓶盖.jpg')
rgb1_to_gray(Image, GrayImage)
threshold (GrayImage, Region1, 100, 130)
connection(Region1, ConnectedRegions)
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 2800, 99999)
fill_up(SelectedRegions, RegionFillUp)
boundary(RegionFillUp, RegionBorder, 'inner')
skeleton(RegionBorder, Skeleton)
gen_contours_skeleton_xld(Skeleton, Contours, 1, 'filter')
解析
生成骨架的轮廓
PS:这样生成的轮廓均是在像素中间,会有半个像素的偏差
64. disp_message ()
先上代码:
read_image (Image, 'D:/HALCON_learn/理论/51-60/瓶盖.jpg')
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_display(Image)
disp_message (WindowHandle, '这是一个瓶盖' , 'window', 70, 192, 'black', 'true')
解析
在指定窗口的指定位置显示指定文字
65. set_display_font()
先上代码:
read_image (Image, 'D:/HALCON_learn/理论/51-60/瓶盖.jpg')
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_display(Image)
set_display_font(WindowHandle,30, 'sans', 'false', 'true')
disp_message (WindowHandle, '这是一个瓶盖' , 'window', 70, 192, 'black', 'true')
解析
设定在窗口上显示的文字样式和字体大小
66. threshold_sub_pix()
先上代码:
read_image (Image, 'D:/HALCON_learn/理论/61-70/机械产品.jpg')
rgb1_to_gray(Image, GrayImage)
threshold_sub_pix(GrayImage, Border, 128)
解析
按照指定的阈值进行灰度边缘提取
PS:该方法不常用,选取的区域死板,并且会有多个小的离散边缘被提取,单位是亚像素
67. edges_sub_pix()
先上代码:
read_image (Image, 'D:/HALCON_learn/理论/61-70/机械产品.jpg')
rgb1_to_gray(Image, GrayImage)
*亚像素边缘提取
edges_sub_pix(GrayImage, Edges, 'canny', 15, 20, 40)
解析
常用的一种边缘提取方法,亚像素边缘提取
PS:常用canny,alpha参数越大,图像平滑越强,越容易丢失细节,对于非canny滤波的其他滤波器,该参数作用恰恰相反
PS:想要细节alpha参数就设置小一点,其他滤波相反
68. lines_gauss()
read_image (Image, 'D:/HALCON_learn/理论/61-70/机械产品.jpg')
rgb1_to_gray(Image, GrayImage)
*高斯找线
lines_gauss(GrayImage, Lines, 2, 3, 8, 'light', 'true', 'bar-shaped', 'true')
解析
采用高斯平滑方式找线
PS :高斯参数sigma越大,平滑越强,细节丢失多,light/dark:黑底找白线\白底找黑线
PS:算子耗时,最好配合reduce_domain()使用,减少时间消耗,其输出也是xld
PS:缺陷检测常用,像划痕
69. lines_gauss() VS edges_sub_pix()
先上代码:
read_image (Image1, 'D:/HALCON_learn/理论/61-70/血管.png')
rgb1_to_gray(Image1, GrayImage1)
edges_sub_pix(GrayImage1, Edges1, 'canny', 1.5, 3, 10)
lines_gauss (GrayImage1, Lines1, 1, 0.1, 1.3, 'dark', 'true', 'bar-shaped', 'true')
解析
仔细观察边缘和线区别,边缘在黑白交界处,而线在黑色的中间
70. union_cocircular_contours_xld()
先上代码:
read_image (Image, 'D:/HALCON_learn/理论/61-70/工件2.png')
rgb1_to_gray(Image, GrayImage)
edges_sub_pix(GrayImage, Edges, 'canny', 0.6, 10, 40)
union_cocircular_contours_xld(Edges, UnionContours, 0.5, 0.1, 0.2, 30, 10, 10, 'true', 1)
解析
合并共圆或近似共圆的边缘形成一个单独的圆形
PS:某些情况下边缘算子会导致边缘结果不连续
以上内容陆续更新。。。
内容如有错误之处,望不吝指出,谢谢
以上内容陆续更新。。。