?怎么用HALCON去開發(fā)應(yīng)用程序
HALCON為應(yīng)用開發(fā)提供了許多方法,但是為了充分利用架構(gòu),推薦如圖1所示的模式。
圖像監(jiān)督,視覺方法原型設(shè)計及最后的開發(fā)都在HDevelop中執(zhí)行,因此,整個程序由許多子程序組成,每一個代表代表一個諸如初始化,處理或者清除的子任務(wù)。主程序僅僅是作為一個通過傳入圖像和接受結(jié)果去調(diào)用子程序的測試環(huán)境。
一個完整的應(yīng)用是在一個編程環(huán)境中開發(fā)的,如Microsoft Visual Studio。這有兩種方法去集成HDevelop程序:要不你導(dǎo)出程序為你的編程語言,然后倒入它們,例如借助include聲明。另外,你可以借助HDevEngine直接去執(zhí)行HDevelop程序。用戶接口和其他必要代碼被所給語言的標(biāo)準(zhǔn)機(jī)制來執(zhí)行;最后工程被編譯和連接。
同HALCON庫一起,被生成的應(yīng)用程序代表了解決方案,能夠被加載到目標(biāo)機(jī)器上或被發(fā)送給客戶。
三步方法有數(shù)個優(yōu)勢:
無論什么時候,視覺部分會很容易地被優(yōu)化或?qū)捳?,因為對于圖像數(shù)據(jù)的監(jiān)督和調(diào)試工具,HDevelop比標(biāo)準(zhǔn)的編程環(huán)境要好的多。
如果你用HDevEngine,當(dāng)你改變了HDevolop程序后,你不必要去重新編譯和連接你的應(yīng)用(前提是你不改變各個程序的簽名)。如果你用的是導(dǎo)出代碼的方式,你不需要去修改應(yīng)用的其他部分,但需要重新編譯和連接應(yīng)用程序。
因為視覺部分是與一般的代碼分離的,所以其可以以一種獨(dú)立的方式被執(zhí)行。另外,你不必要將整個工程發(fā)送給別人。對于技術(shù)支持問題,有一張或者多張圖像的HDevelop程序可以快速的發(fā)送給經(jīng)銷商。
最后, 對于在其他架構(gòu)上如Linux上的重新使用會很容易實現(xiàn)的,因為HDevelop在多操作系統(tǒng)上以相同的方式來運(yùn)行。
需要注意的是,對于這兩種方式(HDevEngine或者導(dǎo)出),應(yīng)用僅僅包含HALCON的函數(shù),諸如助手或者GUI元素等HDevelop有力的開發(fā)工具不能夠被所使用的編程語言所訪問的。
窺視HALCON底層:架構(gòu)和數(shù)據(jù)結(jié)構(gòu)
HALCON的架構(gòu),數(shù)據(jù)結(jié)構(gòu)和內(nèi)部的機(jī)制是根據(jù)哲學(xué)思想來開發(fā)的,具有:
(1)高效
(2)開放
(3)標(biāo)準(zhǔn)
(4)自由描述
高效意味著每一個HALCON算子的執(zhí)行時間會盡可能的短。另外,操作算子已近被設(shè)計成一個標(biāo)準(zhǔn)序列,更復(fù)雜的任務(wù)的完成也會保持高效。
開放的架構(gòu)在兩方面:首先,你可以在許多不同的編程語言下使用HALCON,傳遞外部數(shù)據(jù)到HALCON和訪問HALCON內(nèi)部數(shù)據(jù)也是被支持的。最后,HALCON又透明的接口去集成用戶定義的操作算子和非標(biāo)準(zhǔn)圖像采集設(shè)備(不會改變HALCON的安裝)。
標(biāo)準(zhǔn)化意味著操作算子和數(shù)據(jù)結(jié)構(gòu)的簽名,命名和使用都遵循嚴(yán)格規(guī)則,這就能夠保證在較少錯誤的情況下,快速的學(xué)習(xí)。
最后,HALCON提供每個操作算子及其他們參數(shù)詳細(xì)的信息,不僅僅在文檔中,也可通過特定的算子在線查看。
圖2描述了HALCON的基本架構(gòu),主要部分是圖像處理庫,其由數(shù)量眾多的算子構(gòu)成,你可以以擴(kuò)展包的形式來開發(fā)你自己的算子。你可以通過所謂的語言接口,如HALCON/C++來在你的應(yīng)用中使用這些算子。這些庫允許以不同編程語言特定的編程風(fēng)格直接使用這些操作算子。HDevelop也會用編程語言的接口,但對用戶這是透明的。
對于圖像采集設(shè)備的訪問,HALCON提供了所謂圖像采集接口的公共接口。其允許以共同的方式來用完全不同的采集設(shè)備。包含特定設(shè)備執(zhí)行的庫當(dāng)需要的時候會被動態(tài)的加載。
類似的,I/O設(shè)備通過特定設(shè)備I/O設(shè)備接口來訪問,這些接口允許以共同的方式去訪問不同的I/O設(shè)備,庫也是當(dāng)需要的時候被動態(tài)的加載的。