接上篇 通過一個示例形象地理解C# async await 非並行非同步、並行非同步、並行非同步的併發量控制 前些天寫了兩篇關於C# async await非同步的博客, 第一篇博客看的人多,點贊評論也多,我想應該都看懂了,比較簡單。 第二篇博客看的人少,點贊的也少,沒有評論。 我很納悶,第二篇博客才是重點 ...
使用相機獲取圖像的主要內容是:
- C#下使用VisionPro的工具驅動相機獲取圖像;
- 製作顯示界面,顯示相機獲取的圖像;
- 相機響應用戶指令。
用到的工具:
- Gige相機;
- VisionPro9.0;
- VisualStudio2019 。
1 一個難懂的地方
在VisionPro的幫助文檔中有個詞“幀獲取器”,大家默默的把它翻譯成相機就行了。使用GigE相機的時候就是指相機,其他的也許有不同,不知道。
VisionPro中,相機的初始化設置界麵包含了相機的所有屬性。這些在C#環境中都可以通過編碼的方式實現。
2 取像工具和取像隊列
上圖對應的工具是CogAcqFifoTool,這個類包含上圖中的所有內容。只有一個相機的時候,可以直接使用完成與相機的連接。
CogAcqFifoTool acqTool = new CogAcqFifoTool();
拍照獲取圖像使用的是取像工具的屬性Operator,它是ICogAcqFifo類型。
ICogAcqFifo AcqFifo = AcqTool.Operator;
使用取像隊列的Acquire方法即可獲得一張圖像,取像隊列還提供了非同步方法,通常的應用中這個同步方法就足夠了。
ICogImage image= AcqFifo.Acquire(out numAcqs);
3 構建項目
工具都準備好了,但是代碼不能慌著寫。使用相機獲取一張圖像這個任務可以分成兩個子任務:
- 獲取圖像;
- 展示圖像。
展示圖像使用CogRecordDispaly控制項,找個喜歡的位置放好就可以了。
獲取圖像怎麼做?可以暫停,思考一下。
VisionPro提供了獲取圖像的例子,可以用來學習(2 取像工具和取像隊列)中工具的使用技巧。在項目中不可以完全使用。
從“單一職責”的角度考慮,界面類中不應該存在連接相機內容。界面的職責是顯示,所需要的只是一張圖像。就像討厭的老闆:“我只要結果,過程我不管”。
利用面向對象分析這個項目,相機是一個獨立存在的個體,有自己的名字,劃分為一個單獨的類,很正常。這個類就命名為 Camra 。
硬體設備的使用過程通常分三步:連接→使用功能→斷開。所以,Camra類的方法按照這三部分添加:GetImage,Close。連接放在構造方法中。
設計好類才,編碼工作才可以開始。