halcon示例rim_simple.hdev添加简单的中文注释

这篇文章详细描述了一个涉及图像处理的技术过程,包括读取图像、确定感兴趣区域(ROI)、使用阈值分割、边缘检测、轮廓提取和椭圆拟合。开发者展示了如何使用dev函数实现从图像获取到特征识别的关键步骤。
摘要由CSDN通过智能技术生成

dev_update_off ()
* ****
* step: acquire image
* ****
*读取图像
read_image (ImageReduced, 'C:/Users/33214/Desktop/Image.png.bmp')
*读取图形大小
get_image_size (ImageReduced, Width, Height)
*打开新窗口
dev_open_window_fit_image (ImageReduced, 0, 0, Width, Height, WindowID)
*设置窗口文字属性
set_display_font (WindowID, 14, 'mono', 'true', 'false')
draw_rectangle1 (WindowID, row1, col1, row2, col2)
gen_rectangle1(Rectangle,row1,col1,row2,col2)
reduce_domain(ImageReduced,Rectangle,Image)
* ****
* step: determine region of interest (ROI)
* ****
*使用全局阈值分割图像。
*Image :HImage类型,输入图像,即待分割图像。
*Region :HRegion类型,输出区域,即分割后的区域。
*MinGray :输入灰度低阈值,0~255。
*MaxGray :输入灰度高阈值,0~255,需大于MinGray 。
threshold (Image, Dark, 0, 70)
*断连区,连接
connection (Dark, DarkRegions)
*计算区域
select_shape (DarkRegions, Circles, ['circularity', 'area'], 'and', [0.85, 50], [1.0, 99999])
*计算Circles中每个输入区域的边界
boundary (Circles, RegionBorder, 'inner')
*圆形遮罩,该算子使区域扩大,区域边界平滑,区域内部小于圆形掩模的孔被封闭。
dilation_circle (RegionBorder, RegionDilation, 6.5)
*计算所有输入区域的联合
union1 (RegionDilation, ROIEdges)

dev_display (Image)
dev_set_color ('yellow')
dev_set_draw ('margin')
dev_display (ROIEdges)
*左下角写入文字
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* step: extract edges
* ****
reduce_domain (Image, ROIEdges, ImageROI)
*“高斯导数”滤波器(使用滤光罩)检测步进边缘
edges_sub_pix (ImageROI, Edges, 'lanser2', 0.3, 10, 30)
*根据轮廓位置的行坐标对轮廓进行排序
sort_contours_xld (Edges, SortedContours, 'upper_left', 'true', 'row')

dev_display (Image)
*定义颜色
colored_display (SortedContours, ['cyan', 'white'])
*左下角写入文字
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* step: process contours
* ****
*椭圆弧或闭合椭圆近似XLD轮廓。
*输入轮廓。
*椭圆的拟合算法。
*用于计算的最大轮廓点数(所有点为-1)。
*熟虑的是“闭合”的轮廓的端点之间的最大距离。2
*在轮廓的开始和结束处被忽略的点数。0
*用于Voss方法的圆形段数。200
*强壮性加权拟合的最大迭代次数。3
*用于消除异常值的剪切因子(典型:'*huber'为1.0,'*tukey'为2.0)。2

fit_ellipse_contour_xld (Edges, 'ftukey', -1, 2, 0, 200, 3, 2, Row, Column, Phi, Ra, Rb, StartPhi, EndPhi, PointOrder)
NumHoles := |Ra|
*创建一个或多个椭圆弧或封闭椭圆。
gen_ellipse_contour_xld (ContEllipse, Row, Column, Phi, Ra, Rb, gen_tuple_const(NumHoles,0), gen_tuple_const(NumHoles,rad(360)), gen_tuple_const(NumHoles,'positive'), 1)

dev_display (Image)
*创建一个或多个椭圆弧或封闭椭圆。
sort_contours_xld (ContEllipse, SortedContEllipse, 'upper_left', 'true', 'row')
*定义颜色
colored_display (SortedContEllipse, ['cyan', 'white'])
dev_set_color ('yellow')
*循环画线
for i := 0 to NumHoles - 1 by 1
    sinPhi := sin(Phi[i])
    cosPhi := cos(Phi[i])
    *画直线。
    disp_arrow (WindowID, Row[i], Column[i], Row[i] - sinPhi * Ra[i], Column[i] + cosPhi * Ra[i], 1)
    disp_arrow (WindowID, Row[i], Column[i], Row[i] - cosPhi * Rb[i], Column[i] - sinPhi * Rb[i], 1)
    disp_arrow (WindowID, Row[i], Column[i], Row[i] + sinPhi * Ra[i], Column[i] - cosPhi * Ra[i], 1)
    disp_arrow (WindowID, Row[i], Column[i], Row[i] + cosPhi * Rb[i], Column[i] + sinPhi * Rb[i], 1)
    *设置文本光标的位置。
    set_tposition (WindowID, Row[i] - Rb[i] - 50, Column[i] - 85)
    write_string (WindowID, 'D1=' + 2 * Ra[i])
     *设置文本光标的位置。
    set_tposition (WindowID, Row[i] - Rb[i] - 30, Column[i] - 85)
    write_string (WindowID, 'D2=' + 2 * Rb[i])
endfor

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值