抠图 (提取图像感兴趣的区域)
* 使用halcon 抠图
* 窗体属性设设置: 设置窗体绘制图案的模式 magrin边框模式(只有一个边框)
* fill填充模式(边框内部会有一个遮罩层)
dev_set_draw ('fill')
* 设置颜色
dev_set_color ('green')
* 设置线宽
dev_set_line_width (5)
read_image (Image, 'printer_chip/printer_chip_01')
* 获取当前图像窗口的句柄
dev_get_window (WindowHandle)
*draw_rectangle1() 设置在哪个窗口绘制矩形,以及获取坐标(不会绘制)
*参数1: 窗口的句柄
*参数2: 输出x
*参数3: 输出y
*参数4: 输出x1
*参数5: 输出y1
* halcon中横向的是y轴 纵向的是x轴 行列坐标
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
* 根据起点和终点的坐标,在窗体上绘制矩形 生成一个区域类型的变量
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
* 获取当前区域的 阈值范围
* 设置选择的图像正常显示,其他的区域被黑色遮住
* 参数1: 原始图像
* 参数2: 选择的区域
* 参数3: 生成的新图像
reduce_domain (Image, Rectangle, ImageReduced)
* 根据阈值范围抠图
* 参数1: 需要提起的图像
* 参数2:提取出的新图像
crop_domain (ImageReduced, ImagePart)
halcon 窗体有关的算子【函数】
特点: dev_开头 在Hdevelop 开发工具中有那些窗体
图像窗口:用于渲染 图片,区域,轮播 视频流等
变量窗口:用户展示输出变量;图像变量,控制变量
程序窗口;用于编写图像算法程序
算子窗口;用于查看算子的参数;输出 输入 类型
监控窗口;监视元素变化 ,对象类型等
* 窗口有那些操作:
*1.新建窗体
*2.设置窗体中显示的内容
*3.关闭窗体,输出窗体
*4.更新窗体
*5.设置窗体属性: 背景颜色 字体大小 绘制图像
*6.在窗体上绘制图形,显示文本....
test:=[1,2,3,4]
* 打开监视变量的窗体
* 参数1: 需要监视的变量
dev_inspect_ctrl (test)
* 暂停程序
stop()
test[1]:=666
stop()
test[2]:=888
*关闭监视test变量的窗体
dev_close_inspect_ctrl (test)
* 打开一个新的窗体
dev_open_window (0, 0, 600, 600, 'black', aaa)
dev_open_window (0, 0, 500, 500, 'yellow', bbb)
dev_open_window (0, 0, 400, 400, 'green', ccc)
*关闭窗体 默认关闭最后一个窗体
* dev_open 打开窗体 放到集合中 dev_close 是从集合的尾部删除元素
dev_close_window ()
*设置窗体的属性 ,设置的是最后打开的图像窗体上的属性
dev_set_color ('red')
dev_set_draw ('margin')
dev_set_line_width (10)
*设置错误的显示方式
dev_set_check ('~give_error')
* 绘制圆形
*参数1: 在哪个窗口中绘制
*参数2参数3圆心的坐标
* 参数4 :半径
draw_circle (bbb, Row, Column, Radius)
*绘制圆形
* 参数1: 绘制出来的圆形
* 参数2参数3: 需要绘制的圆的圆心坐标
* 参数4:半径
gen_circle (Circle, Row, Column, Radius)
dev_get_window (WindowHandle)
draw_circle (WindowHandle, Row1, Column1, Radius1)
gen_circle (Circle1, Row1, Column1, Radius1)
* disp 是display 的 简称 表示 显示
* 参数1: 在哪个窗体显示
* 参数2,参数3: 显示的圆心坐标
* 参数4: 半径
disp_circle (WindowHandle, Row1, Column1, Radius1)
* 注意:当开启多个图形窗口的时候,很多操作都要注意先后顺序
* 很多算子,都是在最后打开的窗体中操作的
加载图像划分区域
*使用工具生成代码
*图形窗口 -->绘制新的ROI -->选择要绘制的形状 ---> 工具--->插入代码
gen_rectangle1 (ROI_0, 143.754, 108.459, 218.251, 281.718)
stop()
dev_clear_window ()
read_image (Image, 'printer_chip/printer_chip_01')
* 获取图像高度和宽度
get_image_size (Image, Width, Height)
* 根据像素之间的灰度值将图像划分成n个区域
* 参数1:输入图像
* 参数2:输出区域的集合
* 参数3:横向像素之间的距离
* 参数4:纵向像素之间的距离
* 参数5: 灰度值
* 参数6: 输出区域的最小面积
regiongrowing (Image, Regions, 3, 3, 6, 100)
* 获取区域的总数量
count_obj (Regions, Number)
for Index := 1 to Number by 1
dev_clear_window()
* 从集合中获取某个对象
select_obj (Regions, ObjectSelected, Index)
dev_display (ObjectSelected)
endfor
生成网格图像
* 生成网格图片 类型是图像类型
gen_image_squared_paper (ImageSquaredPaper)
窗体文本标记
文本标记流程
创建描述文字的变量
设置窗体上显示文字的,种类,大小 ,颜色,以及哪个窗体的属性
将文字显示到窗体上
显示在哪个窗体,哪个位置上,生么字体,大小多啊后,背景颜色,字体颜色,盒子阴影...等属性
文字既可以在窗体上,也可以在图片,标记。
* 初始化
dev_close_window ()
dev_get_window (WindowHandle)
*设置某个窗体上文本显示的带大小 字体类型 是否粗体
*参数1: 窗体的句柄
*参数2:字体大小
*参数3:字体类型
*参数4:是否为粗体
*参数5:是否为斜体
set_display_font (WindowHandle, 16, 'sans', 'true', 'false')
* 在图像窗口上显示文本
*参数1:需要显示的文本内容
*参数2: window 表示在窗体上显示文字 Image表示在图像上显示文字
* 参数3参数4 显示的位置 top left 左上角
* top 上 bottom 下 left 左 right 右 center 中间
dev_disp_text ('吴亦凡1', 'window', 'top', 'left', 'black', [], [])
dev_disp_text ('吴亦凡2', 'window', 'center', 'center', 'black', [], [])
dev_disp_text ('吴亦凡3', 'window', 'bottom', 'right', 'black', [], [])
* 设置显示到某一个坐标位置
dev_disp_text ('吴亦凡4', 'window', 100, 100, 'black', [], [])
* 参数5 字体颜色
dev_disp_text ('吴亦凡5', 'window', 100, 100, 'red', [], [])
*
dev_disp_text ('吴亦凡6', 'window', 150, 150, 'black', ['box_color'], ['green'])
dev_disp_text ('吴亦凡6', 'window', 150, 150, 'black', ['shadow'], ['false'])
dev_disp_text ('吴亦凡6', 'window', 150, 150, 'black', ['shadow_color','box_color'], ['yellow','green'])
https://blog.csdn.net/chenai886/article/details/145136736
关于算子详细的窗体操作: