文章目录
- 文章专栏
- 前言
- 文章解读
- 前言
- 创建ROI
- 案例1:直接截取ROI
- 手动截取ROI
- 总结
- ROI套路
- 获取窗口句柄
- 截取ROI区域
- 获取有效区域
- Stop组合
文章专栏
Halcon开发
Halcon学习 练习项目gitee仓库
CSDN Major 博主Halcon文章推荐
前言
今天来看第三章内容,既然是零基础,而且我还有大概3-4个月的时间准备,我还是老老实实从头开始学机器视觉好了。
文章解读
下面我将 Region Of Interest 命名为[找重点]
前言
- [找重点]可以减少无效信息和
- [找重点]经常用于找用于模板匹配的区域
创建ROI
- Halcon提供了一个[reduce_domain]的方法去获取图片域的ROI信息。
案例1:直接截取ROI
*读取图片文件
read_image (Image, 'mreut')
*得到一个坐标为(256,256),半径为200的圆
gen_circle (ROI, 256, 256, 200)
*截取这个圆内的图像信息
reduce_domain (Image, ROI, ImageReduced)
*找到亚像素精度的图片信息
edges_sub_pix (ImageReduced, Edges, 'lanser2', 0.5, 20, 40)
*显示Image/ROI/Edges
dev_display (Image)
dev_display (ROI)
dev_display (Edges)
效果
手动截取ROI
* critical_points.hdev: locate saddle point markers in an image
*
dev_update_window ('off')
* ****
* 获取图片信息
* ****
*加载图片
read_image (Image, 'landmarks')
*获取图片大小
get_image_size (Image, Width, Height)
*设置线段等基本参数
dev_close_window ()
*打开图片长宽的窗口,拿到WindowHandle的句柄
*dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
*我更推荐使用自适应图片大小的窗体这个算子
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_set_part (0, 0, Height - 1, Width - 1)
dev_set_line_width (3)
dev_set_color ('blue')
dev_set_draw ('margin')
dev_display (Image)
set_display_font (WindowHandle, 20, 'mono', 'true', 'false')
* ****
* 截取ROI
* ****
disp_message (WindowHandle, '使用鼠标左键截取图片区域,右键退出', 'window', 12, 12, 'blue', 'false')
dev_set_color ('white')
*--获取绘画的Region区域
draw_region (Region, WindowHandle)
dev_display (Region)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* ****
* step: create ROI
* ****
* 使用reduce_domain算子,设置图片的ROI
reduce_domain (Image, Region, ImageReduced)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* ****
* step: process image within ROI
* ****
critical_points_sub_pix (ImageReduced, 'facet', 1.5, 8, RowMin, ColumnMin, RowMax, ColumnMax, RowSaddle, ColSaddle)*清空整个窗口
dev_clear_window ()
*只显示ROI部分内容
dev_display (ImageReduced)
dev_set_color ('yellow')
for i := 0 to |RowSaddle| - 1 by 1gen_cross_contour_xld (Cross, RowSaddle[i], ColSaddle[i], 25, 0.785398)dev_display (Cross)
endfor
stop ()
dev_update_window ('on')
运行结果
总结
ROI就是个截取部分区域的功能。有主动设置区域和被动设置区域两种方法。
ROI套路
获取窗口句柄
*打开图片长宽的窗口,拿到WindowHandle的句柄
*dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
*我更推荐使用自适应图片大小的窗体这个算子
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
截取ROI区域
* 参数设置ROI区域
gen_circle (ROI, 256, 256, 200)
* 使用WindowHandle窗口句柄,鼠标截取ROI区域
draw_region (ROI, WindowHandle)
获取有效区域
* 使用reduce_domain句柄,获取ROI区域信息
reduce_domain (Image, ROI, ImageReduced)* 可以使用其它算子去解析ROI的ImageReduce区域。
critical_points_sub_pix (ImageReduced, 'facet', 1.5, 8, RowMin, ColumnMin, RowMax, ColumnMax, RowSaddle, ColSaddle)*--如果想凸显ROI区域,可以进行如下操作
*清空整个窗口
dev_clear_window ()
*只显示ROI部分内容
dev_display (ImageReduced)
Stop组合
* 使用disp_continue_message和stop组合显示F5继续程序的提示
disp_continue_message (WindowHandle, 'black', 'true')
stop ()