VisionPro 工业相机连接,测试保存 ,加载

一、展示效果

这里有些功能没有太注重细节主要就是把按键功能实现 

二、搭建页面

button textBox label CogRecordDisplay  CogToolBlockEditV21

 三、步骤

1.实例化类

 public ICogFrameGrabber cogFrame;
 public ICogAcqFifo fifo; 
 public CogToolBlock tb;
 public ICogImage newImage;

 2.窗体加载做准备(加载相机,判断相机数量)

 private void Form1_Load(object sender, EventArgs e)
 {
     Inital();
     LoadToolBlock();
 }
 

   private void Inital()
  {
      CogFrameGrabbers cogFrameGrabbers = new CogFrameGrabbers();
      Console.WriteLine(cogFrameGrabbers.Count);
      if(cogFrameGrabbers.Count<1)
      {
          MessageBox.Show("相机连接失败");
      }
      foreach(ICogFrameGrabber frame in cogFrameGrabbers)
      {
          //相机
          cogFrame = frame;
          //创建图像采集接口
          //参数1: 图像类型
          //参数2: 像素类型
          fifo= frame.CreateAcqFifo("Generic GigEVision (Mono)", CogAcqFifoPixelFormatConstants.Format8Grey, 0, true);
          
      }
      //采集图像完成,回自动调用一个事件处理函数
      //Complete 事件   类似于 click  click鼠标左键单击的时候执行
      //Complete 采集图像完成之后调用
      //绑定一个事件处理函数
      // public delegate void CogCompleteEventHandler(object sender, CogCompleteEventArgs e)
      // mFifo.Complete += new CogCompleteEventHandler(mAcq_com) ;
      //简化
      fifo.Complete += mApp;
  }
  private void mApp(object sender, CogCompleteEventArgs e)
  {
      //显示采集到的图像

      //mFifo.GetFifoState()方法用于获取FIFO的状态信息‌。具体来说,这个方法可以返回以下三个状态信息:

      //‌numPendingVal‌:表示等待中的数据包数量。
      //‌numReadyVal‌:表示已准备好的数据包数量。
      //‌busyVal‌:表示FIFO当前是否忙碌‌
      //这些信息可以帮助开发者了解FIFO的当前状态,从而进行相应的处理。例如,如果numReadyVal大于0,表示有数据包可供处理;如果numPendingVal大于0,表示有数据包正在等待处理;如果busyVal为true,表示FIFO当前正在忙碌中‌

      int numPendingVal, numReadyVal;
      bool busyVal;
      try
      {
          //获取到采集的图像
          fifo.GetFifoState(out numPendingVal, out numReadyVal, out busyVal);

          CogAcqInfo info = new CogAcqInfo();
          
          //CompleteAcquireEx() 结束图像采集过程,并返回采集到的图像数据
          if (numReadyVal > 0)
          {
              ICogImage image = fifo.CompleteAcquireEx(info);
              cogRecordDisplay1.Image = image;
              cogRecordDisplay1.Fit();
              newImage=image;
          }
      }
      catch (Exception ex) { throw; }

  }

 public void LoadToolBlock()
 {
     string path=Directory.GetCurrentDirectory()+@"\ct.vpp";
     tb=CogSerializer.LoadObjectFromFile(path)as CogToolBlock;
 }

3.窗体关闭释放相机

 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
 {
     Release();
 }
 public void Release()
 {
     //获取相机集合
     CogFrameGrabbers cogFrame=new CogFrameGrabbers();
     foreach(ICogFrameGrabber item in cogFrame)
     {
         //释放相机
         item.Disconnect(false);
     }
 }

4.拍照功能

  private void button1_Click(object sender, EventArgs e)
  {
      //调用拍照方式
      fifo.StartAcquire();
  }

5.设置曝光

 private void button2_Click(object sender, EventArgs e)
 { 
     //属性用于获取或设置相机的曝光参数
     //OwnedExposureParams是mFifo的一个属性,用于访问相机的曝光参数。Exposure是OwnedExposureParams的一个成员,用于具体设置或获取曝光值。
     fifo.OwnedExposureParams.Exposure = Convert.ToDouble(textBox1.Text);
 }

6.保存图片

 private void button3_Click(object sender, EventArgs e)
 {
    string path = Directory.GetCurrentDirectory() + @"\Image";
    if (!Directory.Exists(path))
    {
        Directory.CreateDirectory(path);
    }
    CogImageFileTool cogImage = new CogImageFileTool();
    cogImage.InputImage = cogRecordDisplay1.Image;
    string imagen = $"{DateTime.Now.ToString("yyyyMMddHHmmss")}.jpg";
    cogImage.Operator.Open($"{path}\\{imagen}", CogImageFileModeConstants.Write);
    cogImage.Run();
}

7.图像调取工具(两种)

 //读取方式一:
 public ICogImage ReadImage1()
 {
     string path = @"C:\Program Files\Cognex\VisionPro\Images\blister.tif";
     //实例化工具
     CogImageFileTool cogImageFileTool = new CogImageFileTool();
     cogImageFileTool.Operator.Open(path, CogImageFileModeConstants.Read);
     cogImageFileTool.Run();
     return cogImageFileTool.OutputImage;
 }
 //读取方法二:
 public ICogImage ReadImage2()
 {
     string path = @"C:\Program Files\Cognex\VisionPro\Images\blister.tif";
     Bitmap bitmap = new Bitmap(path);
     //CogImage8Grey
     ICogImage image =new CogImage24PlanarColor(bitmap);
     return image;
 }

8.打开图像

private void button4_Click(object sender, EventArgs e)
{
    cogRecordDisplay1.Image = ReadImage1();
}

9.手动选择图像

 private void button5_Click(object sender, EventArgs e)
 {
     OpenFileDialog openFileDialog = new OpenFileDialog();
     openFileDialog.Filter= "图像文件 (*.jpg;*.jpeg;*.png;*.bmp;*.gif)|*.jpg;*.jpeg;*.png;*.bmp;*.gif";
     openFileDialog.InitialDirectory= @"C:\Program Files\Cognex\VisionPro\Images";
     if (openFileDialog.ShowDialog() == DialogResult.OK)
     {

         Bitmap tamp = new Bitmap(openFileDialog.FileName);
         // //CogImage8Grey
         ICogImage image = new CogImage24PlanarColor(tamp);
         cogRecordDisplay1.Image = image;
     }
 }

10.加载TB

 private void button6_Click(object sender, EventArgs e)
 {
     Form2 form2 = new Form2(tb);
     form2.Show();
 }
 //加载tb
 public void LoadToolBlock()
 {
     string path=Directory.GetCurrentDirectory()+@"\ct.vpp";
     tb=CogSerializer.LoadObjectFromFile(path)as CogToolBlock;
 }

11.测量并更新结果

  private void button7_Click(object sender, EventArgs e)
  {
      //把新拍摄的图像传递到tb中
      tb.Inputs["OutputImage"].Value = newImage;
      tb.Run();

      //获取测量之后的图像
      //tb.CreateLastRunRecord().SubRecords[0];
      //方法的作用是获取上一次调用工具块(ToolBlock)运行的结构记录
      //ICogRecord
      cogRecordDisplay1.Record = tb.CreateLastRunRecord().SubRecords[0];
      cogRecordDisplay1.Fit();

      double douwidth = (double)tb.Outputs["MyWidth"].Value;
      
      label2.Text=douwidth.ToString();
  }

12.Tool Block页面

 CogToolBlock block=null;
 public Form2(CogToolBlock TB)
 {
     InitializeComponent();
     block = TB;
 }

 private void Form2_Load(object sender, EventArgs e)
 {
     cogToolBlockEditV21.Subject=block;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值