c#联合halcon 实现了模板匹配,测量 找线找圆等功能,可连接相机测试

最近在项目中用C#联合Halcon做了一些图像处理的工作,实现了一些基础功能,比如模板匹配、测量、找线、找圆等,还顺便测试了相机的连接。今天就来分享一下这些功能的实现过程和一些代码分析。

首先,Halcon作为一个强大的机器视觉库,提供了丰富的图像处理功能。C#作为开发语言,虽然不如C++那样直接与Halcon无缝对接,但通过Halcon提供的.NET库,我们依然可以很方便地调用Halcon的功能。

连接相机

在开始之前,我们需要先连接相机。Halcon提供了HOperatorSet.OpenFramegrabber函数来打开相机,并获取图像。下面是一个简单的相机连接代码:

HTuple cameraHandle;
HOperatorSet.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, "false", "default", "[0] ", 0, -1, out cameraHandle);
HOperatorSet.GrabImage(out HObject image, cameraHandle);

这里我们使用了DirectShow作为相机接口,[0]表示第一个相机设备。GrabImage函数用于抓取一帧图像。如果你有多个相机,可以调整[0]来选择不同的设备。

模板匹配

模板匹配是机器视觉中非常常用的功能,Halcon提供了FindShapeModel函数来实现这一功能。我们首先需要创建一个模板,然后在图像中查找这个模板。

HObject templateImage;
HOperatorSet.ReadImage(out templateImage, "template.png");
HShapeModel shapeModel;
HOperatorSet.CreateShapeModel(templateImage, "auto", -0.39, 0.79, "auto", "auto", "use_polarity", "auto", "auto", out shapeModel);

HObject searchImage;
HOperatorSet.ReadImage(out searchImage, "search.png");
HTuple row, column, angle, score;
HOperatorSet.FindShapeModel(searchImage, shapeModel, -0.39, 0.79, 0.5, 1, 0.5, "least_squares", 0, 0.9, out row, out column, out angle, out score);

CreateShapeModel用于创建模板模型,FindShapeModel则在目标图像中查找这个模板。rowcolumn是模板在图像中的位置,angle是旋转角度,score是匹配得分。

测量

测量功能通常用于检测物体的尺寸或位置。Halcon提供了MeasurePairs函数来实现这一功能。我们可以通过定义测量区域来获取物体的边缘信息。

HObject measureRegion;
HOperatorSet.GenRectangle1(out measureRegion, 100, 100, 200, 300);
HTuple rowEdgeFirst, columnEdgeFirst, amplitudeFirst, rowEdgeSecond, columnEdgeSecond, amplitudeSecond;
HOperatorSet.MeasurePairs(image, measureRegion, 1.0, 40, "all", "all", out rowEdgeFirst, out columnEdgeFirst, out amplitudeFirst, out rowEdgeSecond, out columnEdgeSecond, out amplitudeSecond);

GenRectangle1定义了一个矩形区域,MeasurePairs则在这个区域内进行边缘检测,返回两对边缘点的位置和强度。

找线和找圆

找线和找圆是图像处理中的常见需求。Halcon提供了HoughLinesFindCircle函数来实现这些功能。

HTuple lineRow1, lineCol1, lineRow2, lineCol2;
HOperatorSet.HoughLines(image, "hough_lines", 1, 10, 20, 10, 10, out lineRow1, out lineCol1, out lineRow2, out lineCol2);

HTuple circleRow, circleColumn, circleRadius;
HOperatorSet.FindCircle(image, "hough_circle", 10, 20, 10, 10, 5, 20, out circleRow, out circleColumn, out circleRadius);

HoughLines用于检测直线,返回直线的起点和终点坐标。FindCircle则用于检测圆,返回圆心坐标和半径。

总结

通过C#联合Halcon,我们可以很方便地实现各种图像处理功能。虽然C#不是Halcon的“原生”语言,但通过.NET库,我们依然可以发挥Halcon的强大功能。代码写起来也不复杂,关键是要理解Halcon的API和图像处理的基本原理。

如果你也在做类似的项目,希望这些代码和分析能给你一些启发。当然,Halcon的功能远不止这些,大家可以根据自己的需求去探索更多的功能。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐