有無圖像 沒圖像
是否黑屏 黑屏,白屏,花屏
是否亮燈 亮紅燈
是否開機 不開機
故障 設備找不到相機
商品介紹
下面是其中對于不同的工作要求,加載相機對象和卸載相機對象是通用的。而要使用其他模塊,如事件對象時,相應的改為加載事件對象和卸載事件對象,以及使用事件對象完成相關任務即可。編程時一定要對整個流程做好規劃,特別是硬件編程時一定留意內存泄露,前面分配的資源一定要在后面釋放。
下面是五個大流程的詳細解析,需要的地方已經加以說明,并注解了需要用到的函數
加載相機對象:
卸載相機對象:
加載數據流抓取對象:
卸載數據流抓取對象:
單幀或連續抓圖過程:
按照以上介紹的流程即可實現實時圖像采集:
很多人問我要源代碼,翻了以前的程序文件夾找到了這個程序,演示了利用Pylon SDK進行相機采集的過程,使用MIL完成界面顯示,采集部分封裝成了類,可以直接重用。測試相機為Basler相機。注意Pylon僅完成Raw Data的采集,使用MIL的MbufPut完成圖像數據的重組,然后MIL自動顯示。

3.中斷響應操作
當相機一幀采集完成后,自動跳轉進入中斷回調函數,這里分了兩種中斷回調函數。
種為簡單的取Buffer->處理->放回。
第二種結合Windows的消息隊列,在此處再給一個“處理隊列”,給處理一個緩沖時間。
這里的處理包括常見的圖像處理、計算和顯示及RawData拼裝為圖像等用到Buffer的地方。
前面也說過,常用的是中斷響應處理,除此之外,自己去查詢Buffer填充狀態并作相關同步操作在某些場合也會用到,這個請查詢不同相機SDK給出的同步方案。
差不多所有的工業相機SDK都是這樣的編程模型和流程,AVT 1394相機和Basler Camera Link相機和AVT GigE相機相關代碼在筆者網站可下載,還有之前講的Basler Pylon SDK相機編程,他們基本流程都是一樣,恕不詳述!

需要說明如下幾點:
1.這里的初始隊列為1-10,都是初始分配為DMA隊列的,這個內存分配和釋放過程有的SDK是自己負責的,有的則需要用戶自己分配和釋放,SDK只負責托管使用。
2.一般開始注冊一個中斷處理函數,當“準備隊列”填充完成會自動跳轉到中斷函數中,借此完成同步操作。也可以是用戶自己維護同步結構體,使用查詢和等待的方式判斷“準備隊列”頭是否填充完成,是否該用戶程序獲取數據和處理了。
3.如果用戶處理任務非常簡單,可以去掉“處理隊列”,每次直接GetFrame->處理->PutFrame。如果用戶處理任務比較復雜而不希望出現丟幀的現象,則需要用戶使用“處理隊列”來保存所有可用的Buffer。
4.這里隊列也只是能夠解決處理速度比采集速度慢少許的情況,主要是對不同處理速度做平均來保證采集和處理同步。如果每一幀的處理時間太長,這時候“DMA隊列” Buffer全部轉移到“處理隊列” Buffer,就會出現異常情況,這時不同的相機會有不同的處理方法。

1.工業相機編程模型和流程
2.工業相機SDK接口使用總結
3.Basler Pylon工業相機SDK的使用
4.Pylon 以實時圖像采集講解PylonC SDK使用流程
5.關于使用維視工業相機 SDK 采集圖像的問題
6.工業相機SDK之opencv二次開發
-/hbahbeb/-
聯系方式