首页源码halcon教程(自学halcon要多久)

halcon教程(自学halcon要多久)

编程之家2024-06-10254次浏览

一、halcon如何找圆

Halcon可以通过圆形模板匹配或圆形拟合算法来找到圆形。圆形模板匹配是将一个预先定义好的圆形模板与图像中的每个像素进行比较,得出最佳匹配点,从而确定圆心和半径。

halcon教程(自学halcon要多久)

而圆形拟合算法是将一组离散的点拟合成一个圆形,从而确定圆心和半径。两种方法都可以用于找到单个圆形或多个圆形。在使用圆形模板匹配时,需要注意模板大小和旋转角度的选择,以及阈值的设定,以获得最佳的匹配效果。

二、如何在VB,VC和.NET中使用halcon

在halcon/.net,我们可以用过一个类的实例

(instancesofclass)来调用halcon算子。在halcondotnet引用里,也就是动态链接库里包许多实例化一个类方法,这些

方法可能是重载的,静态的halcon算子我们可以直接通过类名来调用(这些方法包括halcon里所有的算子),而非静态的方法必须要通过实例化一个类

后才可以使用,通常halcon/.net封装了一个类的实例化方法以及类方法。

例如在c++中,可以使用以下两种方法:

halcon教程(自学halcon要多久)

1.c++(算子模式)

通过代码导出,以c++为例,默认导出为算子型的语法结构,而非面向对象的;在此模式下,全部函数声明为全局类型,数据类型只需要用hobject、htuple两类类型进行声明;

2.c++(面向对象)

可以以面向对象的方式重写代码,也即利用类及类的成员函数;在这种模式下,控制变量的类型仍未htuple,而图形数据可以由多种类型,如himage等;

halcon手册建议使用者使用第二种方法。

例如我们使用第二种方法实现抓取图像序列(imagesequence)里第一张图像,并且将他显示在hwindowcontrol窗口中。代码是:

halcon教程(自学halcon要多久)

[cpp]viewplaincopy

privatehwindowwindow;

privatehframegrabberframegrabber;

privatehimageimg;

window=windowcontrol.halconwindow;

framegrabber=newhframegrabber("file",1,1,0,0,0,0,"default",

-1,"default",-1,"default",

"board/board.seq","default",1,-1);

img=framegrabber.grabimage();

img.dispobj(window);

grabimage算子是通过hframegrabber的实例来调用的。如果你是一个有经验的halcon使用者,也许你已经看出来hframegrabber的构造函数调用了openframegraber算子。

但是对于新手来说,可能刚刚接触halcon,对于halcon算子还处于熟悉阶段,从hdevelop中直接到出来的代码也是直接使用静态类。那么建议先使用第一种方法,你只需要明白通过hoperatorset这个类你可以调用任何一个halcon算子。

下面我们来看一下到底怎么样调用一个算子。以grabimage算子为例:

[cpp]viewplaincopy

staticvoidhoperatorset.grabimage(outhobjectimage,htupleacqhandle)//静态方法直接调用算子,包含的参数和halcon算子参数完全相同

voidhimage.grabimage(hframegrabberacqhandle)//类中封装的类方法,要先实例化类后才可以使用

himagehframegrabber.grabimage()//重载的方法

image(output_object).....................................................image;himage

acqhandle(input_control)..........................framegrabber;hframegrabber/htuple

[cpp]viewplaincopy

我们可以看出,算子可以通过三个类进行调

用:hoperatorset,himage,和hframegrabber。其中第一种通过hoperatorset调用主要是用在导出的

hdevelop中(如果你导出程序的话就会看到),也是建议新手使用的方法。而熟悉了之后一般我们在写程序时建议使用另外两种方式,就像下面这样进行调

用:

[cpp]viewplaincopy

himageimage1;

himageimage4=newhimage();

hframegrabberframegrabber=

newhframegrabber("file",1,1,0,0,0,0,"default",-1,

"default",-1,"default","board/board.seq","default",-1,-1);

image1=framegrabber.grabimage();

himageimage3=null;

需要注意的是通过

hframegrabber调用返回方法的值,而通过himage调用没有返回值而是调用的类实例被修改,也就是himage对象被修改。通常,调用类实

例不会被一个算子所修改,除了被上面所看到的“类构造器”(constructor-like)算子调用。

一些算子像countseconds可以当做类方法来使用,例如,你可以直接通过类名调用它们而不用生成一个实例:

[cpp]viewplaincopy

doubles1,s2;

s1=hsystem.countseconds();

这是因为这些算子声明前面都有static关键字:

[cpp]viewplaincopy

staticvoidhoperatorset.countseconds(outhtupleseconds)

staticdoublehsystem.countseconds()

下面我们看一下类的生命周期:从声明(declaration)到终结(finalization)

下面的声明仅仅声明了一个类himage的变量,而没有指向任何的对象:

[cpp]viewplaincopy

himageimage1;

在这个语句中,你不能只使用变量直接去调用算子;有些语言里面甚至不能够将它用做一个输出参数(例如vb2005)。只有先给它一个图像对象,例如:

[cpp]viewplaincopy

image1=framegrabber.grabimage();

你也可以在声明的时候初始化一个变量:

[cpp]viewplaincopy

himageimage2=framegrabber.grabimage();

[cpp]viewplaincopy

三、halcon运行版加密狗的使用方法

安装halcon的时候,勾选“installdriverforusbdongles”,安装加密狗驱动。

回到haspdinst.exe文件的上级目录,找到lmhostid.exe程序,拖入到命令行中,输入“空格-flexid”,回车运行。

安装将加密狗授权文件license_9-xxxxxx.dat文件如:license_9-7e80f32e.dat即可。

小米2s是什么意思(小米2s是什么意思)呼叫转移设置(如何设置呼叫转移)