Halcon知识:如何求一个工件的粗细
一、说明
在实际应用中,有时需要求一个物件的粗细;本文用最简单的方法,给出示范,并对关键几个函数给以说明。如图,假定我们有如下图物品,求其宽度。
二、程序代码
dev_set_color ('red') read_image(Image,'D:/images/reglist/scrw.jpg') rgb1_to_gray(Image, Gmage)WindowWidth := 640 WindowHeight := 540 dev_open_window_fit_size (0, 0, WindowWidth, WindowHeight, -1, -1, WindowHandle1)threshold(Gmage, Region, 10, 75)fill_up(Region,RegionFillUp) get_region_thickness (RegionFillUp, Thickness, Histogramm) area_center (RegionFillUp, Area, Row, Column) elliptic_axis (RegionFillUp, Ra, Rb, Phi) StartRow := Row + sin(Phi) * Ra StartColumn := Column - cos(Phi) * Ra EndRow := Row - sin(Phi) * Ra EndColumn := Column + cos(Phi) * Ra dev_set_color ('yellow') disp_line (WindowHandle1, StartRow, StartColumn, EndRow, EndColumn)dev_open_window (0, WindowWidth + 10, 660, WindowHeight, 'black', WindowHandle2) plot_tuple (WindowHandle2, [], Thickness, [], [], 'red', ['style','margin_top'], ['line',WindowHeight * 0.2]) disp_message (WindowHandle2, 'Thickness along the main axis', 'window', 12, 12, 'black', 'true')输出效果图:
三、代码说明
3.1 读入图像并二值化
dev_set_color ('red')
read_image(Image,'D:/images/reglist/scrw.jpg') 读图像
rgb1_to_gray(Image, Gmage) 转成灰度
WindowWidth := 640
WindowHeight := 540
dev_open_window_fit_size (0, 0, WindowWidth, WindowHeight, -1, -1, WindowHandle1)
预备一个窗口
threshold(Gmage, Region, 10, 75) 二值化区域
fill_up(Region,RegionFillUp) 填充区域内部空洞
3.2 椭圆区域处理
get_region_thickness (RegionFillUp, Thickness, Histogramm) area_center (RegionFillUp, Area, Row, Column) elliptic_axis (RegionFillUp, Ra, Rb, Phi)以上代码将区域假定为椭圆拟合,求出沿主轴的一些属性:
- get_region_thickness (RegionFillUp, Thickness, Histogramm)
运算符 get_region_thickness 计算截面中每个像素沿主轴(参见 elliptic_axis)的区域厚度。主轴上某一点处的厚度定义为轮廓与主轴上铅垂在相应点上相距最远的交点之间的距离。此外,运算符 get_region_thickness 返回区域厚度的直方图。直方图的长度对应于观察区域中出现的最大厚度。
Histogramm:的数据结构
- area_center (RegionFillUp, Area, Row, Column)
运算符 area_center 计算输入区域的面积和中心。面积定义为一个区域的像素数。中心分别计算为所有像素的行坐标或列坐标的平均值。
如果传递了多个区域,则结果存储在元组中,元组中值的索引对应于输入区域的索引。在空白区域的情况下,如果没有设置其他行为,则所有参数的值都为 0.0(参见 set_system)。
- elliptic_axis (RegionFillUp, Ra, Rb, Phi)
3.3 画出主轴线
这里是从中心点为基点,辅助轴偏角画出轴线
StartRow := Row + sin(Phi) * Ra StartColumn := Column - cos(Phi) * Ra EndRow := Row - sin(Phi) * Ra EndColumn := Column + cos(Phi) * Ra dev_set_color ('yellow') disp_line (WindowHandle1, StartRow, StartColumn, EndRow, EndColumn)3.4 画出直方图
dev_open_window (0, WindowWidth + 10, 660, WindowHeight, 'black', WindowHandle2) plot_tuple (WindowHandle2, [], Thickness, [], [], 'red', ['style','margin_top'], ['line',WindowHeight * 0.2]) disp_message (WindowHandle2, 'Thickness along the main axis', 'window', 12, 12, 'black', 'true')- plot_tuple( : : WindowHandle, XValues, YValues, XLabel, YLabel, Color, GenParamNames, GenParamValues : )
该算子将输入的 “x元组,等长度的y元组”,画出其函数的曲线:
XValues:要绘制的函数的 X 值。
如果 XValues 设置为 [],则将其内部设置为 0,1,2,...,|YValues|-1。
如果 XValues 是字符串元组,则将这些值视为类别。
YValues:要绘制的函数的 Y 值。
如果 YValues 设置为 [],则它内部设置为 0,1,2,...,|XValues|-1。
y 值的数量必须等于 x 值的数量
或整数倍。在后一种情况下,
绘制了多个函数,它们共享相同的 x 值。
XLabel: X axis label.
XLabel: Y axis label.
color:绘制函数的颜色。
如果给出 [],则使用当前设置的显示颜色。 如果给出'none',则不绘制函数,而仅绘制 指定的坐标轴。 如果给出一种以上的颜色,多种函数可以用不同的颜色显示。
总结
以上是生活随笔为你收集整理的Halcon知识:如何求一个工件的粗细的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 图像处理:Hough变换原理分析
- 下一篇: Halcon知识: XLD的概念