1. 程式人生 > 實用技巧 >VisionPro開發之讀取相機資料(C#)

VisionPro開發之讀取相機資料(C#)

在 Visiual Studio.NET 環境下通過VisionPro開啟相機並獲取影象的基本步驟如下:
1.建立CogFrameGrabberGigEs物件,獲取連線到影象採集卡的所有相機裝置。
2.通過CogFrameGrabberGigEs獲取單個物件ICogFrameGrabber的引用,支援的影象格式、相機序列號等資訊可以從該介面物件中獲取。
3.通過CogFrameGrabber的CreateAcqFifo方法建立ICogAcqFifo介面物件,在使用CreateAcqFifo方法時須指定影象格式、相機埠等資訊。
4.通過ICogAcqFifo介面的Acquire等方法可以獲取所需影象資料。


5.程式退出前斷開CogFrameGrabber與硬體的連線,否則可能導致退出異常。

注意事項:
①相機的IP與網絡卡在同一網段,關閉防火牆,開啟網絡卡巨幀等物理硬體引數設定正確。
②編譯平臺選擇x64,否則即使相機物理連線沒有問題,也可能出現建立CogFrameGrabbers的Count屬性為零的情況,在AnyCPU模式下也不報錯,原因尚不清楚。

 1 using System;
 2 using System.Drawing;
 3 using System.Collections;
 4 using System.ComponentModel;
 5 using System.Windows.Forms;
6 using System.Data; 7 using Cognex.VisionPro; 8 9 namespace ImageAcquire 10 { 11 public class Form1 : System.Windows.Forms.Form 12 { 13 private Cognex.VisionPro.Display.CogDisplay cogDisplay1;//用於進行影象顯示的VisionPro控制元件 14 private System.Windows.Forms.Button button1;
15 private System.ComponentModel.Container components = null; 16 ICogAcqFifo myFifo = null; 17 ICogFrameGrabber myFrameGrabber = null; 18 public Form1() 19 { 20 InitializeComponent(); 21 InitializeAcquisition(); 22 } 23 24 protected override void Dispose( bool disposing ) 25 { 26 if( disposing ) 27 { 28 if (components != null) 29 { 30 components.Dispose(); 31 } 32 **//5-斷開CogFrameGrabber物件與硬體的連線。** 33 if(myFrameGrabber!=null34 myFrameGrabber.Disconnect(false); 35 } 36 base.Dispose( disposing ); 37 } 38 39 private void InitializeAcquisition() 40 { 41 const string VIDEO_FORMAT = "Sony XC75 640x480"; 42 **// 1-建立CogFrameGrabbers物件** 43 CogFrameGrabbers myFrameGrabbers = new CogFrameGrabbers(); 44 **//2-獲取單個ICogFrameGrabber介面物件** 45 myFrameGrabber = myFrameGrabbers[0]; 46 **//3-建立ICogAcqFifo介面物件** 47 myFifo = myFrameGrabber.CreateAcqFifo(VIDEO_FORMAT,Cognex.VisionPro.CogAcqFifoPixelFormatConstants.Format8Grey, 0, false); 48 } 49 50 [STAThread] 51 static void Main() 52 { 53 Application.Run(new Form1()); 54 } 55 56 private void button1_Click(object sender, System.EventArgs e) 57 { 58 int trigNum; 59 **//4-通過ICogAcqFifo介面物件的Acquire方法進行影象採集。** 60 cogDisplay1.Image = myFifo.Acquire(out trigNum); 61 } 62 } 63 }