很明顯,圖像的采集是所有機器視覺應用中必須解決的問題,HALCON提供了為各種圖像采集設備執行這種交互的接口,圖像采集的任務被簡化為幾行代碼,只需幾個操作符的調用,更重要的是,這種簡單並不是以限制可用功能為代價。使用HALCON,可以在不同的時間模式下從不同的采集設備和相機中獲取圖像。除了從相機中獲取圖像外,HALCON還可以將存儲在文件中的圖像顯示出來(支持的文件格式:BMP、TIFF、GIF、JPEG、PNG、PNM、PCX、XWD)。
基本概念
用HALCON獲取圖像基本上只需要三個步驟,而從文件中讀取圖像則更為簡單:只需調用read_image操作符即可。

打開圖像采集設備
如果想從一個攝像機中獲取圖像,第一步就是要連接到這個設備。HALCON可以解決所有與設備相關的細節問題;只需要調用算子 open_framegrabber,指定相應的圖像采集接口名稱。
還有一個 "虛擬 "的圖像采集界面叫File。顧名思義,這個 "抓幀器 "讀取文件中的圖像,以及所謂的圖像序列文件。后者是Halcon特有的文件類型,典型的擴展名是.seq,它們包含一個圖像文件名的列表,用新的行隔開(可以用文本編輯器很容易地創建它),如果你鏈接到這樣的序列,隨后調用grab_image就會返回文件中指定的序列圖像。 然后,不必創建一個序列文件,而只需指定目錄名稱而不是序列文件作為參數'CameraType'的值。后續調用grab_image會返回在指定的圖像目錄中找到的圖像。如果想用圖像文件序列或者在真實的圖像采集設備上來測試應用程序,那么以上這兩種方法都很有用。
獲取圖像
連接到設備后,只需調用grab_image就可以獲取圖像。
要從磁盤中加載圖像,需要使用read_image,圖像會在當前目錄中和當前設備環境變量HALCONIMAGES指定的目錄中被搜索到。
關閉圖像采集設備
在應用程序結束時,可以使用運算符close_framegrabber關閉與圖像采集設備的連接以釋放其資源。
例子
如前所述,從文件中獲取圖像調用對應的一個運算符:
read_image(Image,'particle')
下面的代碼處理從圖像序列中讀取的圖像:
SequenceName:='pendulum/pendulum.seq'
open_framegrabber('File',-1,-1,-1,-1,-1,-1,'default',-1,'default',-1,'default',SequenceName,'default',-1,-1,AcqHandle)
while(ImageNum<=MaxImageNum)
grab_image(Image,AcqHandle)
...處理圖像...
ImageNum := ImageNum+1
endwhile
擴展概念
在實際應用中,通常不需要讓攝像機來獲取圖像,而重要的是在正確的時刻或速率下獲取圖像,並且攝像機和圖像采集接口都要有合適的參數。因此,HALCON允許進一步參數化采集過程。在HDevelop中,通過菜單項Assistants>Image Acquisition提供了一個助手,它可以幫助選擇圖像源,調整參數,並生成合適的代碼。
打開圖像采集設備
當用open_framegrabber連接到圖像采集設備時,主要參數是對應的HALCON圖像采集接口的名稱,因此,會得到一個所謂的handle,可以用它來訪問該設備,例如,用grab_image或grab_image_async來采集圖像。
通過open_framegrabber的其他參數,可以描述圖像采集設備和攝像機的配置,在這里使用更多完整的配置時是必要的,例如,多個攝像機連接到不同的采集卡的不同端口。更多的參數允許指定所需的圖像格式(尺寸,分辨率,像素類型,顏色空間)。這些參數中大多數都有默認值,如果想使用這些參數,可以使用指定 "default"(字符串參數)或 -1(數字參數)。
通過算子info_framegrabber,可以查詢接口的版本號、可用的板卡、端口號和攝像機類型等信息。
設置參數
如上所述,在連接到圖像采集設備時,已經設置了一些參數,如open_framegrabber。這些參數(圖像采集設備/攝像機的配置和圖像大小等)是所謂的通用參數,因為它們幾乎是所有圖像采集接口所共有的。然而,圖像采集設備在所提供的功能上有很大的不同,導致了有更多的特殊參數。這些參數可以通過算子set_framegrabber_param進行自定義。
通過算子get_framegrabber_param,可以查詢普通參數和特殊參數的當前值。
采集圖像
實際上,在實際機器視覺應用中,不會使用算子grab_image來獲取圖像,而是使用grab_image_async。這兩個操作符的區別如下。如果在循環中獲取和處理圖像 grab_image總是請求獲取一個新的圖像,然后暫停程序,直到獲取完成。然后,對圖像進行處理,之后,程序等待下一張圖像。相反,當使用 grab_image_async 時,圖像的采集和處理是並行的。當一幅圖像 處理完畢,下一張圖像已經在采集中,大大加快了應用程序在處理圖像的速度。
HALCON提供了更多的圖像采集模式,例如,通過外部信號觸發采集或從多台相機同時采集圖像(現實場景中經常用到)。有興趣的話可以了解一下。
涉及算子
打開圖像采集設備
基礎:open_framegrabber
高級:info_framegrabber
設置參數
基礎:set_framegrabber_param, get_framegrabber_param
采集圖像
基礎:read_image, grab_image, grab_image_async
打開圖像采集設備
基礎:close_framegrabber
進階
直接訪問內存中的外部圖像
還可以將外部創建的圖像(即計算機內存中的原始圖像矩陣)傳遞給HALCON。
使用操作符gen_image1、gen_image3、gen_image1_extern或gen_image3_extern。
不支持的圖像采集設備
如果想使用 HALCON 目前不支持的圖像采集設備,也就是說,HALCON不支持的設備,可以創建自己的接口。創建和使用HALCON接口方法可從MVTec的網絡服務器下載圖像采集接口以及可作為集成基礎的模板源代碼,網址為http://www.mvtec.com/products/interfaces。
