Halcon圆拟合不够准确解决方法,卡尺

本文深入探讨了在使用Halcon进行圆拟合时遇到的精度问题,并提供了一种通过调整参数和优化算法来提高圆拟合准确性的解决方案。详细步骤和关键代码在原文中给出。
摘要由CSDN通过智能技术生成

这篇博客写的比较详细,可以参考

https://blog.csdn.net/horsee/article/details/82794569

博客核心是下面的代码

dev_close_window()
dev_update_off ()
dev_open_file_dialog ('read_image', 'default', 'default', Selection)
read_image (Image, Selection)
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
draw_circle_mod (WindowHandle, Height/2, Width/2, Width/20, Row, Column, Radius)
gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, 6.28318, 'positive', 1)
dev_display (ContCircle)
dev_set_color ('green')
create_metrology_model (MetrologyHandle)
add_metrology_object_generic (MetrologyHandle, 'circle', [Row, Column, Radius], 20, 5, 1, 30, [], [], Index)
apply_metrology_model (Image, MetrologyHandle)
get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'all_param', Parameter)
get_metrology_object_result_contour (Contour, MetrologyHandle, 'all', 'all', 1.5)
get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row1, Column1)
dev_display (Contours)
stop()
clear_metrology_model (MetrologyHandle)
dev_clear_window ()
dev_display (Image)
dev_display (Contour)
message1 := 'CenterRow: ' + Parameter[0]
message2 := 'CenterCol: ' + Parameter[1]
message3 := 'Radius: ' + Parameter[2]
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
disp_message (WindowHandle, message1, 'window', 0, -1, 'forest green', 'false')
disp_message (WindowHandle, message2, 'window', 20, -1, 'forest green', 'false')
disp_message (WindowHandle, message3, 'window', 40, -1, 'forest green', 'false')
 ———————————————— 
版权声明:本文为CSDN博主「CarnivoreRabbit」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/horsee/article/details/82794569

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Halcon视觉库中,进行拟合(Circle Fitting)通常需要提供一组像素点(Point List),这些点应该满足以下条件: 1. **足够的点数**:拟合通常需要足够多的像素点,以便算法能够准确地确定的中心位置、半径以及可能的旋转角度。至少10个或更多的点是推荐的,特别是当不完全位于图像的一角时。 2. **均匀分布**:点应该分布在的周长上,这样有助于捕捉的轮廓。如果点分布过于密集或集中在某些区域,可能导致拟合结果不准确。 3. **准确性**:提供给Halcon的点应该是形边缘上的清晰像素,避免包括噪声点或背景干扰,这会影响的精确度。 4. **坐标类型**:Halcon通常期望点是以图像坐标的形式(例如,X-Y坐标对)表示的,它们应该是从0,0(图像左上角)开始的整数。 5. **顺序**:如果可能,最好按照顺时针或逆时针顺序提供点,因为这可以帮助算法更好地理解点之间的关系。 6. **方向**:如果你知道的旋转角度,可以提供包含该信息的点列表,这有助于提高拟合精度。 使用Halcon的`CircleFit`函数时,可以创建一个`PAAccess`对象来存储这些点,然后调用该函数并传入这个点集。具体代码可能会像这样: ```cpp PAAccess points; // 假设你已经有了像素点的数组或列表 Circle circleFitResult; bool success = CircleFit(circleFitResult, points, numPoints); if (success) { // 使用circleFitResult获取拟合参数 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值