首页 >

如何在VB,VC和.NET中使用halcon? – 网络|

网易邮箱怎么打开pop3,笔记本电脑卡怎么办,安卓系统怎么安装在u盘里面如何在VB,VC和.NET中使用halcon? - 网络|如何在VB,VC和.NET中使用halcon

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

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

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

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

1.c++(算子模式)

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

2.c++(面向对象)

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

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

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

[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


如何在VB,VC和.NET中使用halcon? - 网络|
  • pycharm如何导入web项目? - 网络|
  • pycharm如何导入web项目? - 网络| | pycharm如何导入web项目? - 网络| ...

    如何在VB,VC和.NET中使用halcon? - 网络|
  • 用什么办法可以看见微软的代码? - 网络|
  • 用什么办法可以看见微软的代码? - 网络| | 用什么办法可以看见微软的代码? - 网络| ...

    如何在VB,VC和.NET中使用halcon? - 网络|
  • net公司面试都问些什么呀? - 网络|
  • net公司面试都问些什么呀? - 网络| | net公司面试都问些什么呀? - 网络| ...