QT+Halcon实现螺纹检测

      工业上要检测螺丝的内外直径、内外牙距、内外角度,现在比较好用的图像处理库,开源的opencv,收费的有halcon。为了实现螺纹检测,和对比螺纹检测拿个库比较好。分别用opencv和halcon实现了螺纹检测,通过对比发现用halcon实现的效果比较。现在用博客把实现过程记录下来:

1、需要检测的螺纹数据如下:

QT+Halcon实现螺纹检测_第1张图片

2、为了实现检测螺丝以上数据,螺纹内径、螺纹外径、螺纹外牙距、螺纹内牙距、螺纹内角度和螺纹外角度。算法思路如下:

(1)、算法首先必须把这个螺纹所有凸点和凹点找出来。

(2)、然后把两边的凸点和凹点分为两组。

(3)、然后用两边的点分别拟合两条直线line1和line2。

(4)、接着求这两条直线的中线lineCenter。然后求两边的凸点和凹点到中线的距离就是螺丝直径和外径。

(5)、单边的连续凸点、凹点、凸点求出螺丝内夹角,连续的凹点、凸点、凹点求出螺丝的外夹角。

(6)、单边的连续凸点、凸点连线距离为螺丝外牙距,单边连续的凹点、凹点连线距离为螺丝的内牙距。

QT+Halcon实现螺纹检测_第2张图片

3、用halcon实现以上螺丝检测步骤如下。

(1)、加载图像并做二值化。ReadImage(),Threshold()。

(2)、对图像提取轮廓。GenContourRegionXld()。

(3)、排除小轮廓。SelectContoursXld()。

(4)、把求轮廓的旋转矩阵,把轮廓旋转为90度垂直。HHomMat2D、AffineTransContourXld()

(5)、对90度垂直的轮廓求外接矩形,然后使用外接矩形的左上角和右下角,把轮廓裁剪为两个轮廓。ClipContoursXld()

(6)、对裁剪好的轮廓反旋转回原来的角度。HHomMat2D、AffineTransContourXld()

(7)、分别用两个轮廓拟合出line1和line2。FitLineContourXld()。

4、具体代码实现如下:

工程源码链接:https://download.csdn.net/download/cwj066/11855894。

QT+Halcon实现螺纹检测_第3张图片

5、测试结果如下所示:

 

你可能感兴趣的:(QT)