机器视觉_联合编程(二)

链接相机,加载tb,检测

FrameGrabber链接相机拍照

C# 复制代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Cognex.VisionPro;


namespace _02_FrameGrabber链接相机拍照
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        ICogFrameGrabber mGrabber=null;
        ICogAcqFifo mFifo = null;
        private void Form1_Load(object sender, EventArgs e)
        {
            Inital();
        }


        //定义加载相机的方法
        private void Inital()
        {
            //获取到所有的已经连接的相机(集合)
            CogFrameGrabbers cogFrame = new CogFrameGrabbers();
            if (cogFrame.Count<1)
            {
                MessageBox.Show("连接失败");
            }
            //遍历集合 取出相机
            foreach (ICogFrameGrabber item in cogFrame)
            {
               
                mGrabber =item;
                //创建采集图像接口
                //参数1:图像类型
                //参数2:像素类型
                mFifo= item.CreateAcqFifo("Generic GigEVision (Mono)",CogAcqFifoPixelFormatConstants.Format8Grey,0,true);
                //采图完成  之后 自动调用一个事件处理函数
                mFifo.Complete += mAcq_com;
            }
        }
        private void mAcq_com(object sender,CogCompleteEventArgs e )
        {

            int NumReady, numPending;

            bool busy;
            try
            {
                //定义 图像类型  和  接口
                CogImage8Grey image =new CogImage8Grey();
                CogAcqInfo info = new CogAcqInfo();
                //获取采集到的信息
                mFifo.GetFifoState(out NumReady,out numPending,out busy);

                //判断是否采集到图像信息
                if (numPending>0)
                {
                    //获取采集到的信息
                    image = (CogImage8Grey)mFifo.CompleteAcquireEx(info);
                    //显示图像信息
                    cogRecordDisplay1.Image=image;
                    cogRecordDisplay1.Fit();

                }



            }
            catch (Exception)
            {

   
            }

        }

        //拍照
        private void button1_Click(object sender, EventArgs e)
        {
            //调用接口拍照
            mFifo.StartAcquire();
        }
    }
}

设置曝光

C# 复制代码
  //设置曝光
  private void button3_Click(object sender, EventArgs e)
  {
      //手动设置的曝光的值
      int exps = Convert.ToInt32(textBox1.Text);
      //设置曝光
      mFifo.OwnedExposureParams.Exposure = exps;

      MessageBox.Show("曝光设置成功");

  }

释放相机

C# 复制代码
  //释放相机
  private void release()
  {
      CogFrameGrabbers cogFrame = new CogFrameGrabbers();
      foreach (ICogFrameGrabber item in cogFrame)
      {
          item.Disconnect(false);
      }

  }
  private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  {
      release();
  }

读取图片

方式一: CogImageFileTool

C# 复制代码
 public ICogImage ReadImage1()
 {
     string path = @"E:\机器视觉16班\VisionPro\课件\15_ConnectCamera\01_联合编程\02_连接相机\bin\Debug\Image1\wuyifan.bmp";

     //实例化工具
     CogImageFileTool imgFileTool= new CogImageFileTool();
     //打开图像
     //参数1:图像的路径
     //参数2:图像的操作
     imgFileTool.Operator.Open(path, CogImageFileModeConstants.Read);
     //运行工具
     imgFileTool.Run();
     //返回工具输入的图像信息
     return imgFileTool.OutputImage;
 }

方式二: bitmap

C# 复制代码
 public ICogImage ReadImage2()
 {
      string path = @"E:\机器视觉16班\VisionPro\课件\15_ConnectCamera\01_联合编程\02_连接相机\bin\Debug\Image1\20240507150110.bmp";
      Bitmap tmap = new Bitmap(path);
      ICogImage images = new CogImage24PlanarColor(tmap);
      return images;
  }

手动选择图片路径

C# 复制代码
 private void button5_Click(object sender, EventArgs e)
 {
     OpenFileDialog openFileDialog = new OpenFileDialog();
    openFileDialog.Filter = "(*.jpg;*.jpeg;*.gif;*.bmp;*.png)|*.jpg;*.jpeg;*.gif;*.bmp;*.png";
     openFileDialog.InitialDirectory = @"E:\";

     if (openFileDialog.ShowDialog() == DialogResult.OK)
     {
         //获取手动选择的图像的路径
         string fileName =openFileDialog.FileName;
         Bitmap tmap = new Bitmap(fileName);
         ICogImage images = new CogImage24PlanarColor(tmap);
         cogRecordDisplay1.Image = images;
     }

 }

加载ToolBlock并运行工具

C# 复制代码
//1.
  private void LoadToolBock()
  {
      string path = Directory.GetCurrentDirectory() + @"\tb.vpp";

   tb =   (CogToolBlock) CogSerializer.LoadObjectFromFile(path);

      
  }

//2.
   private void button6_Click(object sender, EventArgs e)
   {
       FormTB formTB =  new FormTB(tb);
       formTB.Show();
   }
//3. 
private void FormTB_Load(object sender, EventArgs e)
  {
      cogToolBlockEditV21.Subject = mTB;
  }

检测获取结果

C# 复制代码
 private void button7_Click(object sender, EventArgs e)
 {

     if (tb != null)
     {
         //把采集到的图像传入进tb
         tb.Inputs["OutputImage"].Value = mImage;
         tb.Run();
         //显示测量之后的图像
         cogRecordDisplay1.Record = tb.CreateLastRunRecord().SubRecords[0];
         cogRecordDisplay1.Fit();
         double MWidth =(double) tb.Outputs["MyWidth"].Value;
         label1.Text=MWidth.ToString();

     }

 }

总结

相机工具 :			cogAcqFifoEditV21  
想办法 把我们用 vispro 做好的 Vpp 赋值给 相机工具 
从文件里面 加载对象  :		CogSerializer.LoadObjectFromFile( 文件地址 );
声明一个相机类:  			CogAcqFifoTool
往winform 窗口里面的控件赋值  : 	winform里面的工具名.Subject = 文件里面加载出来的 对象

加载相机 双击 winform 主窗口  来添加事件 直接加载相机  

拍照  点击时 用一个控件显示 
没有的话就是空 :			文件里面加载的对象.Operator   
运行工具:			.Run();
图像类型:			ICogImage 
展示的工具:			cogRecordDisplay.Image  是展示工具要展示的图片

释放相机 添加一个事件 
窗口关闭事件:			FormClosing   当关闭窗口时会触发的事件

释放相机:
  //也要判断一下相机是不是空的
            if (mAcq.Operator != null) 
             {
                //.FrameGrabber  找到硬件 释放相机
                mAcq.Operator.FrameGrabber.Disconnect(false);
            }
        }

//需要背的东西 
工具:  
相机工具 :			cogAcqFifoEditV21 
展示的工具:			cogRecordDisplay.Image  是展示工具要展示的图片

事件:
加载相机 双击 winform 主窗口  来添加事件 直接加载相机  
点击事件
窗口关闭事件:			FormClosing   当关闭窗口时会触发的事件

函数:

往winform 窗口里面的控件赋值  : 	winform里面的工具名.Subject = 文件里面加载出来的 对象
运行工具:			.Run();
展示的工具:			cogRecordDisplay.Image  是展示工具要展示的图片
图片百分比显示:			放图片的工具.Fit();
弹出提示框:			MessageBox.Show("提示语句");
创建采集接口:			相机类型的接口.CreateAcqFifo("Generic GigEVision (Mono)", CogAcqFifoPixelFormatConstants.Format8Grey,0,true);
拿相机获取到的图像信息:		相机接口.CompleteAcquireEx(info) as CogImage8Grey;
加载文件中的vpp对象:		(工具类型)CogSerializer.LoadObjectFromFile(文件地址);
释放相机:			相机接口.Disconnect(false);
接口拍照的方法:			相机类型接口.StartAcquire();
设置曝光:			相机类型接口.OwnedExposureParams.Exposure = 曝光数;
获取当前程序运行路径:		Directory.GetCurrentDirectory()
判断文件夹是否存在:		Directory.Exists(文件地址)
创建文件夹:			Directory.CreateDirectory(文件夹地址);
bitmap类型保存图片:		Bitmap bmp = 图片 as Bitmap;
保存图像:			bmp.Save(文件地址,System.Drawing.Imaging.ImageFormat.图片类型(jpg,png....));
读取图片:  (浅记)
CogImageFileTool imageFile = new CogImageFileTool();
            //.Operator.Open()  工具里面的方法  第一个是图片路径  第二个是图片格式
            //imageFile.Operator.Open(path,CogImageFileModeConstants.Read);
            //imageFile.Run();
            //return imageFile.OutputImage;
bitmap类读取图片:		Bitmap bmp = new Bitmap(图片路径);
保存图像的格式:			(需要一个图像类型) = new CogImage24PlanarColor(btm储存好的);
百分比显示适应图像:		 显示图像的控件.Fit();
弹出窗口:			需要弹出的窗口.ShowDialog();
输入图片:			工具名字.Inputs["OutputImage"].Value = 图像;
把当前文件打包覆盖指定文件: 	CogSerializer.SaveObjectToFile(mTB,文件的完整路径);(需要手动创建路径)
添加事件完成时可直接跳转到事件中:	相机彩图完成后的相机接口.Complete +=事件名(自己起);
过滤文件类型:			文件对话框类.Filter
显示对话框:			.ShowDialog()

通过bitmap 类实现读取图片

            Bitmap bmp = new Bitmap(path);
            ICogImage image = new CogImage24PlanarColor(bmp);   
            return image;
通过 工具类读取图片
	 CogImageFileTool imageFile = new CogImageFileTool();
            //.Operator.Open()  工具里面的方法  第一个是图片路径  第二个是图片格式
            //imageFile.Operator.Open(path,CogImageFileModeConstants.Read);
            //imageFile.Run();
            //return imageFile.OutputImage;
			



用到的类:
声明一个相机类:  		  CogAcqFifoTool
图像类型:		     	ICogImage 
TookBlick类:			  CogToolBlick
连接的硬件设备类:		 ICogFrameGrabber
相机接口类:			   ICogAcqFifo
所有已连接的相机类		 CogFrameGrabbers 
文件对话框类:			   OpenFileDialog
相关推荐
Q_w774212 分钟前
计算机视觉小目标检测模型
人工智能·目标检测·计算机视觉
摇曳的树23 分钟前
【3D目标检测】激光雷达和相机联合标定(二)——MATLAB联合标定工具使用
数码相机·目标检测·3d
创意锦囊32 分钟前
ChatGPT推出Canvas功能
人工智能·chatgpt
知来者逆41 分钟前
V3D——从单一图像生成 3D 物体
人工智能·计算机视觉·3d·图像生成
碳苯1 小时前
【rCore OS 开源操作系统】Rust 枚举与模式匹配
开发语言·人工智能·后端·rust·操作系统·os
Java Fans2 小时前
计算机视觉算法知识详解(含代码示例)
计算机视觉
whaosoft-1432 小时前
51c视觉~CV~合集3
人工智能
网络研究院4 小时前
如何安全地大规模部署 GenAI 应用程序
网络·人工智能·安全·ai·部署·观点
凭栏落花侧4 小时前
决策树:简单易懂的预测模型
人工智能·算法·决策树·机器学习·信息可视化·数据挖掘·数据分析
xiandong207 小时前
240929-CGAN条件生成对抗网络
图像处理·人工智能·深度学习·神经网络·生成对抗网络·计算机视觉