1. 程式人生 > >halcon影象採集

halcon影象採集

影象獲取程式例1. 1.set_system( : : SystemParameter, Value : ) 設定系統引數 2.open_framegrabber ( : : Name, HorizontalResolution,VerticalResolution, ImageWidth, ImageHeight, StartRow, StartColumn,Field, BitsPerChannel, ColorSpace, Generic, ExternalTrigger,CameraType, Device, Port, LineIn : AcqHandle )      開啟並配置影象採集裝置 輸入控制:    Name:影象採集裝置的名稱    HorizontalResolution和VerticalResolution:預期的影象採集介面的水平解析度和垂直解析度    ImageWidth和ImageHeight:指預期影象的寬度部分和高度部分。    StartRow和StartColumn:指顯示預期影象的開始座標    Field:預期影象是一半的影象或者是完整影象    BitsPerChannel:每畫素位元數和影象通道    ColorSpace:獲取影象的輸出形式{gray、raw、rgb、yuv、default}    Generic:通用引數與裝置細節部分的具體意義。    ExternalTrigger:是否有外部觸發    CameraType:使用相機的型別    Device:影象獲取設別連線到的裝置    Port:影象獲取設別連線到的埠    LineIn :相機輸入的多路轉接器    AcqHandle:影象獲取裝置的Handle 3.grab_image( : Image : AcqHandle : ) 從AcqHandle指定的影象獲取裝置中獲取影象,輸出為獲得的影象 4.set_framegrabber_param( : : AcqHandle, Param, Value : ) 為AcqHandle指定的影象獲取裝置設定引數 Param : 'color_space', 'continuous_grabbing', 'external_trigger', 'grab_timeout', 'image_height', 'image_width', 'port', 'start_column', 'start_row', 'volatile' 注意:能夠設定的引數不僅僅是上述建議的引數。也可以一次設定多個引數值。 例如:set_framegrabber_param (AcqHandle, 'port', Port0) set_framegrabber_param (AcqHandle, ['image_width','image_height'], [256, \256]) 對DaHengCams能設定的常用額外引數包括: 'adc_level' ---設定A/D轉換的級別; 'color_space' ---設定顏色空間 'gain' ---設定相機增益 'grab_timeout' ---設定採集超時終止的時間 'resolution' ---設定相機的採相解析度,MOD0為最大的解析度。 'shutter' ---設定相機的曝光時間。 'shutter_unit' ---設定相機曝光時間的單位。 'white_balance' ---相機是否開啟白平衡模式,預設為關閉白平衡 5.info_framegrabber( : : Name, Query : Information, ValueList) 查詢指定的影象採集介面的資訊。 Name為影象採集裝置的名稱 Query為需要查詢的引數名稱 Information是指輸出的文字資訊 ValueList為該影象採集介面的引數值 6.get_image_pointer1(Image : : : Pointer, Type, Width, Height) 獲取一個影象通道的指標,輸出指標以及影象型別和尺寸。 7.dev_set_part( : : Row1, Column1, Row2, Column2 : ) 修改影象顯示部分的尺寸。 8.close_all_framegrabbers( : : : ) 關閉影象採集裝置。 9.count_seconds( : : : Seconds) 測試運算元實行時間 * general configuration of HDevelop set_system ('do_low_error', 'true')  //設定系統引數,在輸出視窗隻立即顯示影象// dev_update_window ('off') stop () * step 1: connect to the image acquisition device * -> Please adapt the following lines for your own image acquisition device. AcqName := 'DaHengCam' open_framegrabber (AcqName, 1, 1, 0, 0, 0, 0, 'default', -1, 'gray', -1, 'false', 'ntsc', 'default', -1, -1, AcqHandle)     //開啟並配置影象採集裝置// stop () * step 2: grab a first image and adjust the window size grab_image (Image, AcqHandle)                            //獲取影象// get_image_pointer1 (Image, Pointer, Type, Width, Height) //獲取影象通道指標// dev_close_window () dev_open_window (0, 0, Width/2, Height/2, 'black', WindowHandle) //開新視窗// dev_set_part (0, 0, Height-1, Width-1) dev_display (Image) stop () * step 3: grab and process images in a loop (exit with left mouse button) dev_open_window (0, Width/2 + 8, Width/2, Height/2, 'black', WindowHandleProcess) dev_set_colored (12) dev_open_window (Height/2 + 68, 0, Width/2, Height/16, 'light gray', WindowHandleButton) dev_set_part (0, 0, Height/16 - 1, Width/2 -1) write_string (WindowHandleButton, ' click here with left mouse button to exit loop')//寫字元                                                                                      進入視窗// dev_set_window (WindowHandle) dev_set_part (0, 0, Height-1, Width-1) Button := 0 while (Button # 1)     grab_image (Image, AcqHandle)      dev_set_window (WindowHandle)     dev_display (Image)     * -> process image (segment with an automatically determined threshold)     auto_threshold (Image, Regions, 4)//高斯平滑影象並利用直方圖分割影象輸出區域//     connection (Regions, ConnectedRegions)2.Insert : 對陣列中的某一個值進行賦值。       Tuple1 := [1,0,3,4,5,6,7,8,9]       Tuple1[3]:=2 顯示結果為:[1, 0, 3, 2, 5, 6, 7, 8, 9],即對索引3後面元素,陣列Tuple1中第4個元素賦值2. example: read_image (Mreut, 'mreut')               //讀入影象 threshold (Mreut, Region, 190, 255)      //閾值化,輸出閾值在190-255的Regions Areas := []                              //定義陣列Areas for Radius := 1 to 50 by 1               //迴圈 dilation_circle (Region, RegionDilation, Radius) //利用半徑為Radius的圓對Region進行膨脹運算,輸出                                                    RegionDilation,輸出形式仍然為Region。 area_center (RegionDilation, Area, Row, Column) //輸出區域的面積和中心畫素座標 Areas[Radius-1] := Area                        //對陣列Areas的第Radius-1個元素進行賦值 endfor 3.基本陣列操作極其對應的運算元 t := [t1,t2]     t1,t2連線成新的陣列                 對應運算元:tuple_concat i := |t|         得到陣列長度                                  tuple_length v := t[i]        選取第i個元素0<= i < |t|                      tuple_select t := t[i1:i2]    選取i1到i1的元素                              tuple_select_range t := subset(t,i) 選取陣列t中的第i個元素                        tuple_select t := remove(t,i) 去除陣列t中的第i個元素                        tuple_remove i := find(t1,t2) 找到t2陣列在t1陣列中出現位置索引                   (or -1 if no match)                          tuple_find t := uniq(t)     在t陣列中把連續相同的值只保留一個             tuple_uniq 4.建立陣列 (1)gen_tuple_const函式 tuple := gen_tuple_const(100,4711) //建立一個具有100個元素的,每個元素都為4711的資料 tuple_new := gen_tuple_const(|tuple_old|,4711) //建立一個和原來資料長度一樣的資料 上面的函式也可以通過如下表達式實現:tuple_new := (tuple_old * 0) + 4711 (2)當陣列中的元素不同時,需要用迴圈語句對陣列中的每一個元素賦值 例如:tuple := []                                        //建立空陣列 for i := 1 to 100 by 1                                  //建立步長為1的迴圈 tuple := [tuple,i*i]                                   //將i方的值賦給陣列的第i個元素 endfor                                                 //迴圈結束     dev_set_window (WindowHandleProcess)     dev_display (ConnectedRegions)     * -> check for a click into the window (error handling switched off, otherwise the cursor must always be in the window)     dev_set_check ('~give_error')     get_mposition (WindowHandleButton, Row, Column, Button)     dev_set_check ('give_error') endwhile dev_set_window (WindowHandleButton) dev_close_window () dev_set_window (WindowHandleProcess) dev_close_window () stop () * clean up dev_update_window ('on') close_all_framegrabbers ()