VisionPro 使用工业相机采集图像的两种方式分享

发布时间 2023-08-25 11:35:33作者: 一杯清酒邀明月

在VisionPro中,使用工业相机采像的方式主要有两种:

  1. 通过调用CogAcqFifoTool工具的方式取像
  2. 通过实现 ICogAcqFifo接口获取图像

1. 通过CogAcqFifoTool工具取图:
① 连接相机到PC
② 修改相机和PC至同一网段,修改相机或者本地网卡IP都可以

 ③ 打开VisionPro,从工具栏拖入CogAcqFifoTool工具

 双击打开,然后绑定相机,设置相机参数

 查看实时图像,如果图像出现异常,或者采像非常失败,一般需要设置GigE栏

 ④ 设置完毕,保存当前CogAcqFifoTool工具,名称最好与被绑定的相机有关,为了方便辨识

 ⑤ 在VS中调用这个VPP文件

1  ICogImage img = null;
2  CogAcqFifoTool cameraTest = new cameraTest(); //创建采像工具对象
3  cameraTest = CogSerializer.LoadObjectFromFile(@"C:\Users\1\Desktop\1\Camera_Test.vpp")as CogAcqFifoTool; //加载采像vpp文件
4  cameraTest.Run(); //运行相机
5  cameraTest.Ran += new EventHandler((sender,e) =>
6  {
7      img=cameraTest.OutputImage;//获取图片
8  });

2. 通过实现 ICogAcqFifo接口获取图像:

 这里通过C#窗体实现一个创建采像工具,然后采集一张图片,完场上图中的效果(注意:如果代码无误的情况下出现相机刷不出来的情况,请检查项目的NetFrameWork版本)

 1  public partial class Form1 : Form
 2  {
 3     public Form1()
 4     {
 5       InitializeComponent();
 6       frameGrabbers = new CogFrameGrabbers();
 7       if (frameGrabbers.Count > 0)
 8       {
 9           foreach (ICogFrameGrabber item in frameGrabbers)
10           {
11               cbb_CameraList.Items.Add(item.Name);
12           }
13           cbb_CameraList.SelectedIndexChanged += new EventHandler(OnFramerGrabberChanged);
14        }
15        else
16        {
17           cbb_CameraList.Items.Add("Not fount camera");
18        }
19     }
20     private CogFrameGrabbers frameGrabbers = null; //声明图像采集器集合对象
21     private ICogAcqFifo iCogAcqFifo = null; //声明图像采集器对象
22     
23     /// 开始采集
24     private void btn_StartAcq_Click(object sender, EventArgs e)
25     {
26        int trgNum = 0;
27        cogDisplay1.Image = iCogAcqFifo.Acquire(out trgNum);
28        cogDisplay1.Fit(true);
29     }
30     
31     /// 创建采像工具
32     private void btn_CreateAcqFifo_Click(object sender, EventArgs e)
33     {
34        string format = cbb_VideoFormat.SelectedItem.ToString();
35        iCogAcqFifo = frameGrabbers[cbb_CameraList.SelectedIndex].CreateAcqFifo(format, CogAcqFifoPixelFormatConstants.Format8Grey, 0, true); 
36        iCogAcqFifo.OwnedGigEVisionTransportParams.PacketSize = 8000;
37        iCogAcqFifo.OwnedGigEVisionTransportParams.LatencyLevel = (int)nud_DelayLevel.Value;
38        iCogAcqFifo.OwnedExposureParams.Exposure = (int)nud_Exposure.Value;
39     }
40     
41     /// 当选择相机的时候触发此事件
42     private void OnFramerGrabberChanged(object sender, EventArgs e)
43     {
44        cbb_VideoFormat.Items.Clear();
45        for (int i = 0; i < frameGrabbers[cbb_CameraList.SelectedIndex].AvailableVideoFormats.Count; i++)
46        {
47           cbb_VideoFormat.Items.Add(frameGrabbers[cbb_CameraList.SelectedIndex].AvailableVideoFormats[i]);
48        }
49     }
50     
51     /// 关闭窗体的时候断开相机
52     private void Form1_FormClosing(object sender, FormClosingEventArgs e)
53     {
54        frameGrabbers[cbb_CameraList.SelectedIndex].Disconnect(false);
55     }
56  }