提示:若没有查找的算子,可以评论区留言,会尽快更新
Halcon算子应用和技巧8
前言
提示:可以使用搜索小工具搜索对应算子名称:
本篇博文主要用于记录学习Halcon中算子的应用场景,及其使用代码和图像展示。只讲通俗易懂使用方法,不讲原理,不讲原理,不讲原理,重要的事情说三遍。
提示:以下是本篇文章正文内容,下面案例可供参考,注意参数坐标的使用,能帮助你理解算子
一、Halcon应用?
Halcon 是一个强大的图像处理工具,该工具是为了解决机器视觉项目任务而创建的。
二、算子汇总
每一博文仅展示10个算子,点击此链接进行查询所有算子,并点击对应算子跳转相应博文。'
【跳转链接】
三、应用算子
71. crop_domain_rel()
先上代码:
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image(Image, 'D:/HALCON_learn/理论/71-80/工件.png')
get_image_size(Image, Width, Height)
set_display_font(WindowHandle, 16, 'mono', 'true', 'false')
disp_message(WindowHandle, '尺寸是'+Width+'*' + Height, 'window', 219, 236, 'black', 'true')
crop_domain_rel(Image, ImagePart, 20, -1, -1, -1)
get_image_size(ImagePart, Width2, Height2)
disp_message(WindowHandle, '尺寸是'+Width2+'*' + Height2, 'window', 219, 236, 'black', 'true')
解析
算子精确裁剪图像尺寸,从边缘裁剪像素,一个像素也可以裁剪;右图为从上裁剪20像素的结果
PS:算子裁剪顺序上 左 下 右
72. move_region()
先上代码:
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image(Image, 'D:/HALCON_learn/理论/71-80/工件.png')
gen_rectangle1(Rectangle, 161,20, 228,195)
move_region(Rectangle, RegionMoved, 30, 30)
set_display_font(WindowHandle, 16, 'mono', 'true', 'false')
解析
将区域从左上角开始,按照指定参数平移区域
PS:下 右为正方向,上 左 为反方向
73. union_collinear_contours_xld()
先上代码:
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image(Image, 'D:/HALCON_learn/理论/71-80/光伏板.png')
rgb1_to_gray(Image, GrayImage)
edges_sub_pix(GrayImage, Edges, 'canny', 3, 20, 40)
union_collinear_contours_xld(Edges, UnionContours, 5, 0.02, 500, 0.1, 'attr_keep')
解析
近似共线的轮廓组合在一起,右图为合并后结果
PS:具体的参数设置参考其他博文
74. tuple_substr ()
先上代码:
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image (Image, 'D:/HALCON_learn/理论/71-80/工件.png')
string := '这是一个工件并带有多个圆孔'
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_disp_text(string, 'image',50, 60, 'black', [], [])
*截取文字
tuple_substr (string, 2, 5, Substring)
dev_disp_text(Substring, 'image',80, 80, 'black', [], [])
* 该方法有同样的作用截取
string2 := string{1:5}
dev_disp_text(string2, 'image',120, 80, 'black', [], [])
*数组使用 这两句自行复制运行看效果
tuple_substr ([string,string2], [0,3], [3,6], Substring3)
dev_disp_text(Substring3, 'window', 400, 300, 'black', [], [])
解析:
算子作用是从字符串中截取文字
PS:注意数字从0开始,比如【0,5】,第五个数字位置文字也是要取的,注意和python区分
PS:tuple_substr这个函数值适用于字符串数组,不能用于其他类型数组
75. tuple_string ()
先上代码:
row := [15465, 29258, 31079, 48178, 53557]
tuple_string (row, 'f', String)
* ['546', '925', '107', '817', '355']
tuple_substr (String, 1, 3, Substring1)
* 通过这个方式可以取数组中的元素
Substring5 := row[1:3]
解析:
作用将数组转字符串
Substring1 是 -> [‘546’, ‘925’, ‘107’, ‘817’, ‘355’]
Substring5 是 ->[29258, 31079, 48178]
这个就不放图了,自行运行观看
76. open_file ()
先上代码:
* 创建文件句柄
open_file ('D:/HALCON_learn/code/xls.xls', 'append', FileHandle)
* 第一行一列写入字符a
fwrite_string (FileHandle, 'a\t')
* 第一行二列写入字符a
fwrite_string (FileHandle, 'b\n')
* 第二行一列写入字符c
fwrite_string (FileHandle, 'c\t')
* 第二行二列写入字符d
fwrite_string (FileHandle, 'c\n')
close_file (FileHandle)
解析:
创建xls的excel文件,用于记录数据
PS:‘\t’ 换列 ‘\n’ 换行,写入模式采用’append’,若xls.xls文件不存在系统会自动创建
PS:‘input’ 作用打开文件; ‘append’ 在原有文件基础上追加文字; ‘output’ 每次会清空内容,重新写入
77. fit_circle_contour_xld ()
先上代码:
* *******************
* 读图
* *******************
read_image(Image1, 'D:/HALCON_learn/理论/71-80/test')
rgb1_to_gray(Image1, GrayImage)
median_image(GrayImage, ImageMedian, 'circle', 3, 'mirrored')
mean_image(ImageMedian, ImageMean, 13, 13)
dyn_threshold(ImageMedian, ImageMean, RegionDynThresh, 5, 'light')
connection (RegionDynThresh, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 11200, 99999)
count_obj(SelectedRegions, Number)
select_obj(SelectedRegions, ObjectSelected, 1)
fill_up (ObjectSelected, RegionFillUp1)
select_obj(SelectedRegions, ObjectSelected1, 2)
fill_up (ObjectSelected1, RegionFillUp2)
* *******************
* 定位
* *******************
difference(RegionFillUp1, RegionFillUp2, RegionDifference)
skeleton (RegionDifference, Skeleton)
gen_contour_region_xld(Skeleton, Contours, 'border')
fit_circle_contour_xld (Contours, 'algebraic', -1, 0, 0, 3, 2, Row1, Column1, Radius1, StartPhi1, EndPhi,
解析:
圆拟合xld轮廓,请续看算子 78,图三是骨架
78. gen_circle_contour_xld ()
先上代码:
* *******************
* 读图
* *******************
read_image(Image1, 'D:/HALCON_learn/理论/71-80/test')
rgb1_to_gray(Image1, GrayImage)
median_image(GrayImage, ImageMedian, 'circle', 3, 'mirrored')
mean_image(ImageMedian, ImageMean, 13, 13)
dyn_threshold(ImageMedian, ImageMean, RegionDynThresh, 5, 'light')
connection (RegionDynThresh, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 11200, 99999)
count_obj(SelectedRegions, Number)
select_obj(SelectedRegions, ObjectSelected, 1)
fill_up (ObjectSelected, RegionFillUp1)
select_obj(SelectedRegions, ObjectSelected1, 2)
fill_up (ObjectSelected1, RegionFillUp2)
* *******************
* 定位
* *******************
difference(RegionFillUp1, RegionFillUp2, RegionDifference)
skeleton (RegionDifference, Skeleton)
gen_contour_region_xld(Skeleton, Contours, 'border')
fit_circle_contour_xld (Contours, 'algebraic', -1, 0, 0, 3, 2, Row1, Column1, Radius1, StartPhi1, EndPhi, PointOrder)
gen_circle_contour_xld (ContCircle, Row1, Column1, Radius1, 0, 6.28318, 'positive', 1)
解析:
根据参数生成XLD的圆
图一是骨架 图二是根据fit_circle_contour_xld拟合结果生成的圆,图三是 xld 圆穿过像素区域
79. gen_cross_contour_xld ()
先上代码:
* *******************
* 定位 (续算子78 code)
* *******************
difference(RegionFillUp1, RegionFillUp2, RegionDifference)
skeleton (RegionDifference, Skeleton)
gen_contour_region_xld(Skeleton, Contours, 'border')
fit_circle_contour_xld (Contours, 'algebraic', -1, 0, 0, 3, 2, Row1, Column1, Radius1, StartPhi1, EndPhi, PointOrder)
gen_circle_contour_xld (ContCircle, Row1, Column1, Radius1, 0, 6.28318, 'positive', 1)
gen_cross_contour_xld (Cross, Row1, Column1, 100, 0)
解析:
在指定位置生成xld十字交叉标记
80. dump_window_image()
先上代码:
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image (Image, 'D:/HALCON_learn/理论/71-80/工件.png')
rgb1_to_gray (Image, GrayImage)
threshold(GrayImage, Region, 128, 200)
dump_window_image(Image1,WindowHandle )
write_image (Image1, 'tiff', 0, 'D:/HALCON_learn/理论/71-80/window_image')
解析:
将窗口中显示的内容,以图像的方式保存
PS:对于一些不是image格式的图像可以采用这种方式保存
PS:配合write_image使用
以上内容陆续更新。。。
内容如有错误之处,望不吝指出,谢谢
以上内容陆续更新。。。