官术网_书友最值得收藏!

3.3 軟件圖像采集

熟悉了HALCON界面之后,接下來(lái)就要考慮怎么樣進(jìn)行圖像采集。圖像采集是圖像處理的基礎(chǔ),采集圖像的速度和質(zhì)量會(huì)直接影響后續(xù)圖像處理的效率。本章主要介紹如何獲取輸入圖像。

3.3.1 獲取非實(shí)時(shí)圖像

當(dāng)不能在檢測(cè)現(xiàn)場(chǎng)進(jìn)行實(shí)時(shí)調(diào)試時(shí),我們可以選擇拍攝好的一些圖像或者視頻作為測(cè)試素材,進(jìn)行算法測(cè)試與處理。

①利用read_image算子讀取圖像,程序如下:

     read_image (Image, 'D:/patras.png')

以上程序可讀取單張指定位置圖像,若要讀取整個(gè)文件夾的圖像,則可以利用for循環(huán)來(lái)實(shí)現(xiàn),代碼如下:

    *列出指定路徑下的文件
    list_files ('D:/picture', ['files','follow_links'], ImageFiles)
    *選擇符合條件的文件
    tuple_regexp_select(ImageFiles,['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm
|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
    *循環(huán)讀取文件夾中的文件
    for Index := 0 to |ImageFiles| - 1 by 1
           read_image (Image, ImageFiles[Index])
    endfor

②利用快捷鍵。

按住Ctrl+R打開(kāi)讀取圖像對(duì)話窗口,在文件名稱一欄中選擇圖像所在的文件路徑,在語(yǔ)句插入位置點(diǎn)擊確定,即可獲得圖像,如圖3.18所示。

圖3.18 使用快捷鍵獲取圖像

③利用采集助手批量讀取文件夾下所有圖像。

利用采集助手批量讀取文件夾下所有圖像的步驟為:點(diǎn)擊菜單欄中的“助手”→“打開(kāi)新的Image Acquisition”,點(diǎn)擊“資源”選項(xiàng)卡下的“選擇路徑”,如圖3.19所示。點(diǎn)擊“代碼生成”選項(xiàng)卡下的“插入代碼”,如圖3.20所示。

圖3.19 文件選擇路徑

圖3.20 插入代碼

④讀取視頻文件。

讀取視頻文件與讀取圖像文件類似,以HALCON圖像采集助手為例:

點(diǎn)擊菜單欄中的“助手”→“打開(kāi)新的Image Acquisition”,點(diǎn)擊“資源”選項(xiàng)卡下的“圖像獲取接口”,選項(xiàng)區(qū)域選擇“DirectFile”,如圖3.19所示,然后選擇“連接”選項(xiàng)卡,在其中設(shè)置讀取視頻的參數(shù),在“媒體文件”中選擇視頻所在的路徑,如圖3.21所示,即可實(shí)現(xiàn)視頻的輸入。

圖3.21 選擇媒體文件

實(shí)現(xiàn)代碼參考如下:

    *開(kāi)啟圖像采集接口
    open_framegrabber ('DirectFile', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1,
'false', 'D:/video.avi', 'default', -1, -1, AcqHandle)
    *開(kāi)始異步采集
    grab_image_start (AcqHandle, -1)
    while (true)
           *獲取采集的像
           grab_image_async (Image, AcqHandle, -1)
    endwhile
    close_framegrabber (AcqHandle)

HALCON支持的視頻格式并不多,文件中可選的只有“.avi”格式的視頻,而且并非所有“.avi”格式的文件都能提取。因此建議使用圖像或者圖像序列的方式來(lái)代替非實(shí)時(shí)視頻輸入。

3.3.2 獲取實(shí)時(shí)圖像

實(shí)時(shí)圖像采集是利用現(xiàn)代化技術(shù)進(jìn)行實(shí)時(shí)圖像信息獲取的手段,在現(xiàn)代多媒體技術(shù)中占有重要的地位。在日常生活中、生物醫(yī)學(xué)領(lǐng)域、航空航天等領(lǐng)域都有著廣泛的應(yīng)用。圖像采集的速度、質(zhì)量直接影響到產(chǎn)品的整體效果。在HALCON中,獲取實(shí)時(shí)圖像主要有兩種方式:①通過(guò)HALCON自帶的采集接口獲取;②通過(guò)相機(jī)配套的SDK獲取。本節(jié)主要介紹第一種方式。

HALCON的采集功能非常強(qiáng)大,它支持的相機(jī)種類非常豐富,為市面上常見(jiàn)的多種機(jī)型提供了統(tǒng)一的公用接口。如果系統(tǒng)選擇的相機(jī)支持HALCON,就可以直接使用HALCON自帶的接口庫(kù)實(shí)現(xiàn)連接。

HALCON實(shí)時(shí)圖像采集可分為三步,如圖3.22所示。

圖3.22 HALCON實(shí)時(shí)采集圖像流程

(1)連接相機(jī)

在HALCON中,調(diào)用open_framegrabber算子可以連接相機(jī),同時(shí)設(shè)置一些基本的采集參數(shù),如選擇相機(jī)類型和指定采集設(shè)備。也可以設(shè)置和圖像相關(guān)的參數(shù),介紹如下。

①HorizontalResolution:圖像采集接口的水平相對(duì)分辨率。如果是1,表示采集的圖寬度和原圖一樣大;如果是2,表示采集圖的寬度為原圖的兩倍。默認(rèn)為1。

②VerticalResolution:圖像采集接口的垂直相對(duì)分辨率。同樣,默認(rèn)為1,表示采集的圖寬度和原圖一樣大。

③ImageWidth:圖像的寬,即每行的像素?cái)?shù)。默認(rèn)為0,表示原始圖的寬度。

④ImageHeight:圖像的高,即每列的像素?cái)?shù)。默認(rèn)為0,表示原始圖的高度。

⑤StartRow、StartColumn:采集圖像在原始圖像上的起始坐標(biāo),均默認(rèn)為0。

⑥Field:相機(jī)的類型,默認(rèn)為default。

⑦BitsPerChannel:像素的位數(shù),默認(rèn)為-1。

⑧ColorSpace:顏色空間,默認(rèn)為default,也可以選擇Gray或RGB,分別表示灰度和彩色。

⑨Generic:通用參數(shù)與設(shè)備細(xì)節(jié)部分的具體意義,默認(rèn)為-1。

⑩CameraType:相機(jī)的類型,默認(rèn)為default,也可以根據(jù)相機(jī)的類型選擇ntsc、pal或auto。

?Device:HALCON所連接的采集設(shè)備的編號(hào),默認(rèn)為default,如果不確定相機(jī)的編號(hào),可使用info_framegrabber算子進(jìn)行查詢。

?Port:圖像獲取識(shí)別連接的端口,默認(rèn)為-1。

這個(gè)算子執(zhí)行完后會(huì)返回一個(gè)圖像采集的連接句柄AcqHandle,該句柄就如同HALCON和硬件進(jìn)行交互的一個(gè)接口。使用該句柄可以實(shí)現(xiàn)圖像捕獲、設(shè)置采集參數(shù)等。

(2)設(shè)置采集參數(shù)

open_framegrabber算子是針對(duì)大部分相機(jī)的公用接口,但相機(jī)的種類繁多,功能各異,因此公用接口中只包含了通用的幾種簡(jiǎn)單操作的參數(shù)。如果想要充分地利用相機(jī)的全部功能,則可以使用set_framegrabber_param設(shè)置其他的特殊參數(shù)。

具體的參數(shù)種類或值的含義可參考HALCON的算子文檔,如果想要查看HALCON具體支持哪些可修改的參數(shù),可以使用info_framegrabber算子。例如:

     info_framegrabber('GigEVision','parameters',ParametersInfo,ParametersValue)

特殊參數(shù)將在“變量監(jiān)視”窗口列出,如圖3.23所示。

圖3.23 特殊參數(shù)列表

如要修改其中的某項(xiàng)參數(shù),使用set_framegrabber_param算子。例如:

     set_framegrabber_param (::AcqHandle, Param,Value: )

其中AcqHandle為圖像采集的句柄,Param為參數(shù)名稱,Value為要修改的值。選項(xiàng)可參考如下:

AcqHandle:(輸入?yún)?shù))圖像采集設(shè)備句柄。

Param:(輸入?yún)?shù))參數(shù)名稱,可以設(shè)置'color_space'(顏色空間), 'continuous_grabbing'(連續(xù)獲取圖像), 'external_trigger'(外部獲取觸發(fā)器)等。

Value:(輸入?yún)?shù))要修改的參數(shù)值。

值得注意的是,如果某個(gè)參數(shù)在open_framegrabber中設(shè)定過(guò),那么該參數(shù)將不可在相機(jī)工作過(guò)程中被修改。如果要查詢某一個(gè)參數(shù)的值,可以用get_framegrabber_param算子。例如:

     get_framegrabber_param (AcqHandle, 'name', Value)
(3)采集圖像

與相機(jī)建立聯(lián)系后,可以調(diào)用grab_image或grab_image_async算子進(jìn)行圖像采集。

①grab_image用于相機(jī)的同步采集,具體算子如下:

     grab_image( : Image : AcqHandle : )

其工作流程是先獲取圖像,然后在圖像轉(zhuǎn)換等處理流程完成之后再獲取下一幀圖像,圖像的獲取和處理是兩個(gè)順序執(zhí)行的環(huán)節(jié)。因此,下一幀圖像的獲取要等待上一幀圖像的處理完成才開(kāi)始,這樣采集圖像的速率會(huì)受處理速度的影響。

②grab_image_async用于相機(jī)的異步采集,具體算子如下:

     grab_image_async( : Image : AcqHandle, MaxDelay : )

其中MaxDelay表示異步采集時(shí)可以允許的最大延時(shí),異步采集不需要等到上一幀圖片處理完成再開(kāi)始捕獲下一幀,圖像的獲取和處理是兩個(gè)獨(dú)立的環(huán)節(jié)。

(4)關(guān)閉圖像采集接口

采集完圖像后可用close_framegrabber關(guān)閉圖像采集設(shè)備。

例3.1

采集圖像實(shí)例。

    *打開(kāi)海康威視相機(jī)
    open_framegrabber ('GigEVision', 0, 0, 0, 0, 0, 0, 'default', 8, 'gray', -1,
'false', 'default', 'c42f90f25dbe_Hikvision_MVCA05010GM', 0, -1, AcqHandle)
    *準(zhǔn)備采集圖像
    grab_image_start (AcqHandle, -1)
    *循環(huán)采集圖像
    while (true)
           grab_image_async (Image, AcqHandle, -1)
    Endwhile
    *關(guān)閉相機(jī)
    close_framegrabber (AcqHandle)
主站蜘蛛池模板: 子长县| 广安市| 泾阳县| 铁力市| 桐柏县| 荥经县| 大石桥市| 睢宁县| 本溪市| 榆社县| 会宁县| 治多县| 泸州市| 淮南市| 阜新| 电白县| 阿拉善右旗| 池州市| 黑水县| 康平县| 武穴市| 丹阳市| 扶沟县| 宜兰市| 甘南县| 新蔡县| 新丰县| 安顺市| 房产| 武强县| 讷河市| 乌兰察布市| 兴化市| 铜山县| 江阴市| 张家口市| 天门市| 寻乌县| 南京市| 金门县| 昔阳县|