halcon获取物体边缘

#边缘检测1-照片整体边缘检测
read_image(Image,'D:/训练照片/2')
rgb1_to_gray(Image,GrayImage)
*计算边缘幅值,参数过大会不显示边缘
sobel_amp(GrayImage,Amp,'sum_abs',9)
*阈值范围
threshold(Amp,Edg,55,255)
skeleton (Edg,Skeleton)
dev_clear_window()
dev_display(Skeleton)

在这里插入图片描述
在这里插入图片描述

*直线找边
*清空屏幕,显式控制图像显示
dev_close_window ()
*读取图片
read_image (Image, 'D:/训练照片/2')
*根据 图片文件打开 图像窗口并获取窗口句柄
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)

*******测量逻辑**********
*创建测量模型
create_metrology_model (MetrologyHandle)

*第一条测量直线
*绘制第一条测量直线
draw_line (WindowHandle, Row1_1, Column1_1, Row2_1, Column2_1)
*添加第一条直线测量对象到模型
add_metrology_object_line_measure (MetrologyHandle, Row1_1, Column1_1, Row2_1, Column2_1, 20, 5, 1, 30, [], [], Index1)
*获取第一条直线的模型轮廓
get_metrology_object_model_contour (Contour1, MetrologyHandle, 0, 1.5)
*获取第一条直线的边缘位置结果
get_metrology_object_measures (Contours1, MetrologyHandle, 0, 'all', Row1, Column1)

*第二条测量直线
*绘制第二条测量直线
draw_line (WindowHandle, Row1_2, Column1_2, Row2_2, Column2_2)
*添加第二条直线测量对象到模型
add_metrology_object_line_measure (MetrologyHandle, Row1_2, Column1_2, Row2_2, Column2_2, 20, 5, 1, 30, [], [], Index2)
*获取第二条直线的模型轮廓
get_metrology_object_model_contour (Contour2, MetrologyHandle, 1, 1.5)
*获取第二条直线的边缘位置结果
get_metrology_object_measures (Contours2, MetrologyHandle, 1, 'all', Row2, Column2)

*显示测量轮廓
dev_set_color ('cyan')
dev_display (Contour1)
dev_display (Contour2)
dev_display (Contours1)
dev_display (Contours2)

*执行找边(找直线)并显示结果
apply_metrology_model (Image, MetrologyHandle)

*获取第一条直线的测量结果
get_metrology_object_result (MetrologyHandle, 0, 'all', 'result_type', 'all_param', Parameter1)
*获取第一条直线的结果轮廓
get_metrology_object_result_contour (ResultContour1, MetrologyHandle, 0, 'all', 1.5)

*获取第二条直线的测量结果
get_metrology_object_result (MetrologyHandle, 1, 'all', 'result_type', 'all_param', Parameter2)
*获取第二条直线的结果轮廓
get_metrology_object_result_contour (ResultContour2, MetrologyHandle, 1, 'all', 1.5)

*显示结果轮廓
dev_set_line_width (3)
dev_set_color ('red')
dev_display (ResultContour1)
dev_display (ResultContour2)

clear_metrology_model (MetrologyHandle)
stop()

在这里插入图片描述

### 使用 Halcon 实现实时物体尺寸测量 #### 准备工作 为了实现基于 Halcon 的实时物体尺寸测量,需先安装并配置好 Halcon 开发环境。确保已准备好相机设备用于图像采集。 #### 图像获取与预处理 通过 `grab_image` 或者 `open_framegrabber` 获取来自摄像头的实时视频流,并对其进行必要的预处理操作,比如灰度化、滤波等以提高后续边缘检测的效果[^1]。 ```cpp // 打开帧接收器连接到摄像机 open_framegrabber ('GigE', -1, -1, -1, -1, -1, -1, 'default', -1, -1, AcqHandle) while (true) // 抓取一帧图片 grab_image (Image, AcqHandle) // 将彩色图转换成灰度图 rgb1_to_gray(Image, GrayImage) end while ``` #### 边缘提取与形态学运算 利用 Canny 算子或其他合适的算子来寻找目标轮廓;接着运用闭合、膨胀收缩等一系列形态学变换去除噪声干扰以及填补可能存在的断裂部分,从而获得较为完整的边界信息. ```cpp edges_sub_pix (GrayImage, Edges, 'canny', 1, 20, 40) dilation_circle(Edges,DilatedEdges,3.5) closing_rectangle1(DilatedEdges,ClosedContours,7,7) ``` #### 物体定位及特征计算 采用区域分析函数识别感兴趣的对象位置及其几何属性(如面积、周长),进而依据这些参数推导出实际物理尺度大小。这里假设已经过校准得知像素间距,则可以直接乘上相应系数完成单位换算过程. ```cpp connection(ClosedContours, ConnectedRegions) select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', MinArea, MaxArea) smallest_rectangle1(SelectedRegions, Row1, Column1, Row2, Column2) // 像素距离转毫米距离的比例因子 PixelToMMFactor := KnownDistanceInMillimeters / PixelCountBetweenTwoPoints Width_mm = abs(Column2 - Column1)*PixelToMMFactor; Height_mm = abs(Row2 - Row1)*PixelToMMFactor; disp_message(WindowHandle,'Object Width:' + real_to_string(Width_mm)+ ' mm' , 'window', 12, 12, 'black','true') disp_message(WindowHandle,'Object Height:'+real_to_string(Height_mm)+' mm', 'window', 12, 36, 'black','true') draw_region(WindowHandle, ClosedContours) ``` 上述代码片段展示了如何使用 Halcon 进行简单的实时物体尺寸测量流程。具体应用时还需要考虑更多细节问题,例如光照条件变化的影响、不同材质表面反射特性差异等因素带来的挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值