第一部分 halcon篇(hdevelop 17.12)
一、使用halcon的open_framegrabber算子打開相機
1.打開相機:open_framegrabber ('GigEVision2', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', '002149019150_DahengImaging_MER50014GM', 0, -1, AcqHandle)
參數:
2.異步采集:grab_image_start (AcqHandle, -1)
參數:
AcqHandle (input_control) framegrabber → (integer)
要使用的采集設備的句柄。
MaxDelay (input_control) number → (real)
這個參數已經過時,並沒有效果。
Default value: -1.0
Suggested values: -1.0, 20.0, 33.3, 40.0, 66.6, 80.0, 99.9
二、先關閉窗口,再打開一個新窗口
1.關閉窗口:dev_close_window()
2.打開窗口:dev_open_window(0,0,512,512,‘black’,WindowHandle)
參數:
(前面四個參數是窗口的左上角和右下角坐標值)
(第五個參數是窗口的背景顏色)
(第六個參數是打開窗口的句柄)
三、循環采集
1.開始循環:while (true)
參數:
(true表示無限循環)
2.采集圖像:grab_image_async (Image, AcqHandle, -1)
參數:
(image表示圖像變量)
(Acqhandle為相機設備句柄)
(-1表示異步抓取開始和圖像傳送之間的最大容許延遲[ms])
3.獲取圖像寬度get_image_size (Image, Width, Height)
參數:
(image同上)
(后面兩參數表示圖像寬度,注意寬和高的順序別寫錯)
4.設置顯示圖像寬度:dev_set_part (0, 0, Width, Height)
參數:
(分別表示顯示的左上角坐標和右下角坐標,主要這里寬是縱坐標,高是橫坐標,注意同上)
5.顯示圖像:dev_display(Image)
參數:
(顯示的圖像變量)
6.結束循環:endwhile
四、關閉相機
1.關閉相機:close_framegrabber (AcqHandle)
第二部分 c#篇(visual studio 2015)
一、配置環境
1.選擇相應的框架平台
項目——屬性——對應的框架平台(我選net framework4.5.2)
2.選擇生成的平台
項目——屬性——生成——目標平台(我選x64)
3.添加引用
(1)添加halcon的.net動態庫halcondotnet.dll
右擊引用——添加引用——瀏覽——選擇halcon安裝目錄(MVTec)——bin——選擇對應的net框架——選擇halcondotnet.dll;
(2)添加命名空間HalconDotNet
在添加命名空間處輸入 using HalconDotNet;
(3)添加halcon圖像窗口控件
工具箱——公共控件——選擇項——瀏覽——選擇halcondotne.dll;
(4)將動態halcon.dll和halcondotnet.dll庫復制到項目的exe所在的目錄下(bin\debug)
在halcon安裝目錄找到對應的動態庫——手動復制到項目的debug目錄下(注意選擇相應的平台)
(其中halcondotnet.dll可以不用復制,因為完成以上步驟后,只要編譯程序,會自動添加到debug目錄下,但是還是提倡手動添加一下)
二、導入halcon導出的采集顯示程序
1.halcon導出c#文件
2.打開C#文件
三、c#新建Windows窗體應用程序項目
1.添加一個hWindowControl控件顯示采集的圖像,一般不使用hsmartwindowcontrol控件
2.添加四個bottom控件,分別修改text屬性為:打開相機、關閉相機、單次執行、連續執行
3.添加一個Timer控件,用於實現循環采集,控制采集幀率(但精度不高)
4.定義一個bool變量,來記錄相機開關狀態
四、整合halcon導出的程序到項目中
1.復制定義變量程序
(1)在halcon導出的C#程序中,我們只需關注private void action(){}里的程序
(2)復制private void action(){}里的定義變量程序,其中HObject定義的為圖像變量,而HTuple定義的為控制變量
(3)把它們復制到項目窗口類下,作為該窗口類的全局變量
2.復制打開相機程序
判斷自定義的變量openCamear是否為false,如果是,打開相機,並給openCamear賦值為true,否則輸出提示:“相機已打開!”
3.復制連續采集程序
(1)把定時器關閉放入采集顯示的botten按鈕中
(2)在定時器的Tick事件里添加halcon導出陳序的while部分,實現循環采集(注意不包含while)
3.單次采集
和定時器的Tick事件里面代碼一樣,但是要加多一句如下,關閉計時器。(注意一樣需要判斷相機是否為打開狀態)
4.關閉相機
首先判斷相機是否打開,如果打開,則關閉並把openCamear賦值為false,否則提示:“相機已關閉!”