Halcon Solution Guide I basics(3): Region Of Interest(有兴趣区域/找重点)

文章目录

  • 文章专栏
  • 前言
  • 文章解读
    • 前言
    • 创建ROI
    • 案例1:直接截取ROI
      • 手动截取ROI
  • 总结
    • ROI套路
      • 获取窗口句柄
      • 截取ROI区域
      • 获取有效区域
    • Stop组合

文章专栏

Halcon开发

Halcon学习 练习项目gitee仓库

CSDN Major 博主Halcon文章推荐

前言

今天来看第三章内容,既然是零基础,而且我还有大概3-4个月的时间准备,我还是老老实实从头开始学机器视觉好了。

文章解读

下面我将 Region Of Interest 命名为[找重点]

前言

  • [找重点]可以减少无效信息和
  • [找重点]经常用于找用于模板匹配的区域
    Halcon Solution Guide I basics(3): Region Of Interest(有兴趣区域/找重点)_第1张图片

创建ROI

  • Halcon提供了一个[reduce_domain]的方法去获取图片域的ROI信息。
    Halcon Solution Guide I basics(3): Region Of Interest(有兴趣区域/找重点)_第2张图片

案例1:直接截取ROI

Halcon Solution Guide I basics(3): Region Of Interest(有兴趣区域/找重点)_第3张图片

*读取图片文件
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)

效果
Halcon Solution Guide I basics(3): Region Of Interest(有兴趣区域/找重点)_第4张图片

手动截取ROI

Halcon Solution Guide I basics(3): Region Of Interest(有兴趣区域/找重点)_第5张图片
Halcon Solution Guide I basics(3): Region Of Interest(有兴趣区域/找重点)_第6张图片

* 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 1
    gen_cross_contour_xld (Cross, RowSaddle[i], ColSaddle[i], 25, 0.785398)
    dev_display (Cross)
endfor
stop ()
dev_update_window ('on')

运行结果
Halcon Solution Guide I basics(3): Region Of Interest(有兴趣区域/找重点)_第7张图片

总结

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)

Halcon Solution Guide I basics(3): Region Of Interest(有兴趣区域/找重点)_第8张图片

Stop组合

* 使用disp_continue_message和stop组合显示F5继续程序的提示
disp_continue_message (WindowHandle, 'black', 'true')
stop ()

Halcon Solution Guide I basics(3): Region Of Interest(有兴趣区域/找重点)_第9张图片

你可能感兴趣的:(Halcon开发,机械视觉,Halcon)