halcon 相機外觸發

2021-07-14 21:01:58 字數 1821 閱讀 7660

很多情況下,我們在使用工業相機時,不能使用相機自帶的sdk(或者是我們太懶了,不希望寫sdk這麼麻煩),所以很多人會選擇halcon的image acquisition助手,簡單,通用,速度快,簡直是神器.

但是在實際的應用中,會發現乙個嚴重的問題,如果需要使用相機的外部觸發,那麼會出現什麼情況呢?

,毫無疑問,會超時.

分析一下,預設的grab_timeout值為5000,那麼如果設定了外部觸發,當grab_image_async (image, acqhandle, -1)在5s內沒有採集到影象的話,就會丟擲異常,顯而易見,這是不應該發生的.

那麼如何處理這個問題呢?直接先上**和結果

(由於測試的時候用的是線陣相機,所有是這樣的效果,但是結果ok)

附上關鍵**

while (true)

trygrab_image_async (image, acqhandle, -1)

* image acquisition 01: do something

catch(exception)

continue

endtry

endwhile

這裡最好再設定一下超時的值,最好設定小一點,這樣觸發後採集的精度高一些.設想如果超時5s,那麼有可能剛迴圈開始採集時,觸發了外部訊號,那麼必須要等到異常(5s後)才執行採集,顯然是不合理了.

在c#中,為了防止主程式假死,最好開個執行緒執行迴圈.

//獲取相機控制代碼

hoperatorset.openframegrabber("gigevision", 0, 0, 0, 0, 0, 0, "progressive", -1, "default", -1,"false", "default", "00111cf59efc_teledynedalsa_spydergigecolourcame", 0, -1,out acqhandle);

//幀觸發模式(獲取開始採集的時間)

hoperatorset.setframegrabberparam(acqhandle,"framestarttriggermode","on");

hoperatorset.setframegrabberparam(acqhandle,"grab_timeout",100);

hoperatorset.setframegrabberparam(acqhandle,"lineselector","line1");

hoperatorset.setframegrabberparam(acqhandle,"lineformat","ttl");

hoperatorset.grabimagestart(acqhandle, -1);

//開乙個執行緒等待採集

thread thre = new thread(loopgrab);

thre.start();}}

//等待採集執行緒

private void loopgrab()

catch (exception ex)}}

Halcon 相機標定

1.九點標定法 camera calibration 2.自標定法 徑向畸變自標定法 radial distortion self calibration.hdev 獲取影象的畸變引數,並不獲取焦距引數。輻射畸變自標定法 radiometric self calibration.hdev 固定相機自...

工業相機的觸發

觸發 被動的輸出模式,實時性要求高,比如抓拍運動的物體。觸發訊號可以由軟體產生,也可以由感測器 機械開關產生,叫軟 硬觸發。sdk中有專門的介面觸發訊號,還可以設定幀數。不同的工業相機提供不同的程式設計介面 sdk 儘管不同介面不同相機間程式設計介面各不相同,他們實際的api結構和程式設計模型很相似...

Halcon學習 光源 鏡頭 相機選型

機器視覺中光源的目的是使被測物的重要特徵顯現出來,而抑制不需要的特徵。背光照明 通常用於機械零件的外形尺寸測量 電子零件 ic晶元形狀檢測 膠片的汙跡檢測 透明物體的劃痕檢測等。環形光源 適合用於邊緣檢測 金屬表面的刻字和損傷檢測,也可用於電子零件 塑膠成型零件上的文字檢查,可有效去除因小型工件表面...