欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

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

在halcon/.net,我們可以用過一個(gè)類的實(shí)例

(instancesofclass)來調(diào)用halcon算子。在halcondotnet引用里,也就是動(dòng)態(tài)鏈接庫(kù)里包許多實(shí)例化一個(gè)類方法,這些

方法可能是重載的,靜態(tài)的halcon算子我們可以直接通過類名來調(diào)用(這些方法包括halcon里所有的算子),而非靜態(tài)的方法必須要通過實(shí)例化一個(gè)類

后才可以使用,通常halcon/.net封裝了一個(gè)類的實(shí)例化方法以及類方法。

例如在c++中,可以使用以下兩種方法:

1.c++(算子模式)

通過代碼導(dǎo)出,以c++為例,默認(rèn)導(dǎo)出為算子型的語(yǔ)法結(jié)構(gòu),而非面向?qū)ο蟮模辉诖四J较拢亢瘮?shù)聲明為全局類型,數(shù)據(jù)類型只需要用hobject、htuple兩類類型進(jìn)行聲明;

2.c++(面向?qū)ο螅?/p>

可以以面向?qū)ο蟮姆绞街貙懘a,也即利用類及類的成員函數(shù);在這種模式下,控制變量的類型仍未htuple,而圖形數(shù)據(jù)可以由多種類型,如himage等;

halcon手冊(cè)建議使用者使用第二種方法。

例如我們使用第二種方法實(shí)現(xiàn)抓取圖像序列(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的實(shí)例來調(diào)用的。如果你是一個(gè)有經(jīng)驗(yàn)的halcon使用者,也許你已經(jīng)看出來hframegrabber的構(gòu)造函數(shù)調(diào)用了openframegraber算子。

但是對(duì)于新手來說,可能剛剛接觸halcon,對(duì)于halcon算子還處于熟悉階段,從hdevelop中直接到出來的代碼也是直接使用靜態(tài)類。那么建議先使用第一種方法,你只需要明白通過hoperatorset這個(gè)類你可以調(diào)用任何一個(gè)halcon算子。

下面我們來看一下到底怎么樣調(diào)用一個(gè)算子。以grabimage算子為例:

[cpp]viewplaincopy

staticvoidhoperatorset.grabimage(outhobjectimage,htupleacqhandle)//靜態(tài)方法直接調(diào)用算子,包含的參數(shù)和halcon算子參數(shù)完全相同

voidhimage.grabimage(hframegrabberacqhandle)//類中封裝的類方法,要先實(shí)例化類后才可以使用

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

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

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

[cpp]viewplaincopy

我們可以看出,算子可以通過三個(gè)類進(jìn)行調(diào)

用:hoperatorset,himage,和hframegrabber。其中第一種通過hoperatorset調(diào)用主要是用在導(dǎo)出的

hdevelop中(如果你導(dǎo)出程序的話就會(huì)看到),也是建議新手使用的方法。而熟悉了之后一般我們?cè)趯懗绦驎r(shí)建議使用另外兩種方式,就像下面這樣進(jìn)行調(diào)

用:

[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調(diào)用返回方法的值,而通過himage調(diào)用沒有返回值而是調(diào)用的類實(shí)例被修改,也就是himage對(duì)象被修改。通常,調(diào)用類實(shí)

例不會(huì)被一個(gè)算子所修改,除了被上面所看到的“類構(gòu)造器”(constructor-like)算子調(diào)用。

一些算子像countseconds可以當(dāng)做類方法來使用,例如,你可以直接通過類名調(diào)用它們而不用生成一個(gè)實(shí)例:

[cpp]viewplaincopy

doubles1,s2;

s1=hsystem.countseconds();

這是因?yàn)檫@些算子聲明前面都有static關(guān)鍵字:

[cpp]viewplaincopy

staticvoidhoperatorset.countseconds(outhtupleseconds)

staticdoublehsystem.countseconds()

下面我們看一下類的生命周期:從聲明(declaration)到終結(jié)(finalization)

下面的聲明僅僅聲明了一個(gè)類himage的變量,而沒有指向任何的對(duì)象:

[cpp]viewplaincopy

himageimage1;

在這個(gè)語(yǔ)句中,你不能只使用變量直接去調(diào)用算子;有些語(yǔ)言里面甚至不能夠?qū)⑺米鲆粋€(gè)輸出參數(shù)(例如vb2005)。只有先給它一個(gè)圖像對(duì)象,例如:

[cpp]viewplaincopy

image1=framegrabber.grabimage();

你也可以在聲明的時(shí)候初始化一個(gè)變量:

[cpp]viewplaincopy

himageimage2=framegrabber.grabimage();

[cpp]viewplaincopy