一、halcon代码(完整)
注:图片要放入指定文件夹(本案例是在D:/pictures中)
*******读取文件夹中所有图片路径**********
*将D:/pictures文件夹下的图片文件路径(png和jpg)全部读取到ImageFiles中
list_image_files ('D:/pictures', ['png','jpg'], [], ImageFiles)
*******选取目标图像展示才窗口上**********
*读取其中一张图片用于创建模版
read_image (Image, ImageFiles[3])
*关闭当前打开的图形窗口(用于清理之前的窗口,避免干扰)
dev_close_window ()
*获取图像大小
get_image_size (Image, Width, Height)
*按图像大小创建一个尺寸一样的窗口,输出变量,窗口的唯一标识WindowID(后续操作该窗口时需要用到)
dev_open_window (0, 0, Width, Height, 'black', WindowID)
*设置图形的绘制模式。只绘制图形的边缘(轮廓),不填充内部(后续绘制矩形时只显示边框)。
dev_set_draw ('margin')
*在当前窗口显示图像
dev_display (Image)
*******绘制感兴趣区域 (ROI) **********
*在窗口中交互式绘制一个旋转矩形(用户用鼠标操作),左键框选范围、右键确认,即绘制感兴趣区域 (ROI)
draw_rectangle2 (WindowID, Row, Column, Phi, Length1, Length2)
*根据绘制的参数生成矩形区域(非交互式,用于后续计算)
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
*裁剪图像,只保留矩形区域内的像素
reduce_domain (Image, Rectangle, ImageReduced)
*******根据ROI区域创建模版**********
*创建形状模版:以裁剪后的图像(ImageReduced)为模板,创建一个用于后续匹配的 “形状模板”(基于图像轮廓和灰度特征)。
create_shape_model(ImageReduced, 5, rad(0), rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', WindowID)
*******搜索某图像是否有与模版匹配的区域**********
* 搜索匹配 :读取用于搜索的图像(这里复用了图像ImageFiles[3],实际应用中通常是其他图像)
read_image(SearchImage, ImageFiles[3])
find_shape_model(SearchImage, WindowID, rad(0), rad(360), 0.7, 0, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
*******显示匹配的区域,轮廓为绿色**********
* 可视化结果 :在窗口中标记出匹配到的区域,直观展示结果。
dev_display_shape_matching_results(WindowID, 'green', Row, Column, Angle, 1, 1, 0)
二、运行展示
1、启动程序
复制程序到halcon软件中
2、查看图像是否加载正常
点开控制变量中的ImageFiles
查看变量监视中是否有所有图片的路径,没有则查看图片路径是否有误,有路径,则找到做模版用的图片序号,我这里是3
3、修改图片索引值
根据上一步得到的序号值修改ImageFiles的索引值
4、点击重置程序运行
每次运行前都要点一下重置,否则会从上一次执行到的地方开始
5、点击运行程序
运行正常的话会弹出一个窗口,窗口中展示的就是你选的图片
6、框选矩形ROI区域
用鼠标左键点击图像框选目标位置、点击+号可以移动矩形区域,拖动边缘可缩放矩形范围(这里我框选了一个椭圆形)
7.点击鼠标右键确认,展示查找结果
可以发现图片中所有和模版匹配的区域都被找到了(显示出绿色边缘)
变量这里还可以看到每个匹配到的区域坐标