当前位置: 首页 > news >正文

C# 与 相机连接

一、通过组件连接相机

需要提前在VisionPro里面保存一个CogAcqFifoTool相机工具为 .vpp

  1. 定义一个相机工具
CogAcqFifoTool mAcq = null;
  1. 将保存的相机工具放入mAcq中
string path = @“C:\Acq.vpp”;
mAcq = (CogAcqFifoTool)CogSerializer.LoadObjectFrommFile(path);
  1. 给窗口相机工具赋值(可有可无)
cogAcqFifoEditv21.Subject = mAcq;
  1. 点击进行拍照
if(mAcq.Operator != null){mAcq.Run(); // 运行相机工具ICogImage mImage = mAcq.OutputImage;  // 获取图片// 显示图片CogRecordDisplay1.Image = mImageg;CogRecordDisplay1.Fit();
}
  1. 关闭相机释放资源
if(mAcq.Operator != null){mAcq.Operator.FrameGrabber.Disconnect(false);
}

二、使用类连接相机

  1. 封装
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using Cognex.VisionPro;namespace Pro20250118_Cognex接口连接相机
{public class Camera{public ICogFrameGrabber grabber = null;//硬件public ICogAcqFifo fifo = null;//采集接口//图像采集完成,传递图片的事件public event Action<ICogImage> OnCompleted;public ICogImage CogImage { get; set; } = null;/// <summary>/// 初始化相机/// </summary>public void InitialCam(){//1. 枚举所有的已连接的硬件CogFrameGrabbers frameGrabbers =new CogFrameGrabbers();//CogFrameGrabbers 是一个集合类对象,当只有一个相机的时候,我们使用frameGrabbers[0]这个对象if (frameGrabbers.Count < 1){MessageBox.Show("没有搜寻到相机");return;}try{//2. 给硬件对象赋值grabber = frameGrabbers[0];//赋值相机对象//3. 创建采集接口//参数1 视频格式 可以参考vp工具初始化相机时的视频格式 参数2 图像格式 参数3 0 参数4 truefifo = grabber.CreateAcqFifo("Generic GigEVision (Mono)", CogAcqFifoPixelFormatConstants.Format8Grey, 0, true);fifo.OwnedExposureParams.Exposure = 10;//设置曝光时间为10ms//4. 添加采集完成事件fifo.Complete += Fifo_Complete;}catch (Exception ex){MessageBox.Show("相机初始化失败");}}int count;//采集完成并创建图像private void Fifo_Complete(object sender, CogCompleteEventArgs e){int numPendingVal, numReadyVal;bool busyVal;try{ICogImage image = null;CogAcqInfo info = new CogAcqInfo();//创建一个采集信息fifo.GetFifoState(out numPendingVal, out numReadyVal, out busyVal);//获取采集状态if (numReadyVal > 0){image = fifo.CompleteAcquireEx(info);//获取图像CogImage = image; OnCompleted?.Invoke(image);//触发事件,传递图片count++;}if (count>3) {GC.Collect();//采集三次以后gc回收一下}}catch (Exception){}}/// <summary>/// 相机拍照/// </summary>public void CamRun(){if (fifo != null)fifo.StartAcquire();}/// <summary>/// 关闭相机/// </summary>public void CloseCam(){CogFrameGrabbers frameGrabbers = new CogFrameGrabbers();foreach (ICogFrameGrabber fg in frameGrabbers){fg.Disconnect(true);//相机断开连接}}public void SetExposure(double exp){if (fifo != null){fifo.OwnedExposureParams.Exposure = exp;//设置相机的曝光时间, 单位是ms}}}
}
  1. 调用方法
// 初始化相机
Camera cam1 = new Camera();
cam1.InitialCam();//初始化相机// 采集图像
cam1.CamRun();//采集图像是有时间的,有可能是100ms 也有可能是200ms// 获取图片
cogRecordDisplay1.Image = null;
cogRecordDisplay1.Image = cam1.CogImage;
cogRecordDisplay1.Fit();
cam1.CogImage = null;// 关闭相机释放资源
cam1.CloseCam();// 设置相机的曝光时间
cam1.SetExposure(2);
  1. 调用完整代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;namespace Pro20250118_Cognex接口连接相机
{public partial class FrmMain : Form{Camera cam1 = new Camera();public FrmMain(){InitializeComponent();}//窗体加载事件private void FrmMain_Load(object sender, EventArgs e){cam1.InitialCam();//初始化相机cam1.OnCompleted += Cam1_OnCompleted;}private void Cam1_OnCompleted(Cognex.VisionPro.ICogImage image){//cogRecordDisplay1.Image = null;//cogRecordDisplay1.Image = image;//cogRecordDisplay1.Fit();}//拍照按钮click事件private void btnTrigger_Click(object sender, EventArgs e){cam1.CamRun();//采集图像是有时间的,有可能是100ms 也有可能是200mswhile (cam1.CogImage == null)Thread.Sleep(10);//让当前线程休眠10mscogRecordDisplay1.Image = null;cogRecordDisplay1.Image = cam1.CogImage;cogRecordDisplay1.Fit();cam1.CogImage = null;}private void FrmMain_FormClosed(object sender, FormClosedEventArgs e){cam1.CloseCam();}private void btnSetExp_Click(object sender, EventArgs e){cam1.SetExposure(double.Parse(textBox1.Text.Trim()));}}
}

三、选择生成的平台

项目——属性——生成——目标平台(我选x64)
在这里插入图片描述


http://www.mrgr.cn/news/97427.html

相关文章:

  • 使用python-pptx操作PowerPoint文档详解
  • Django接入 免费的 AI 大模型——讯飞星火(2025年4月最新!!!)
  • 十、C++速通秘籍—多进程
  • Java八股文-List集合
  • 量子计算入门:Qiskit实战量子门电路设计
  • 【QT】QT的多界面跳转以及界面之间传递参数
  • 【stm32--HAL库DMA+USART+空闲中断不定长收发数据】
  • py文件打包为exe可执行文件,涉及mysql连接失败以及找不到json文件
  • 时间梯度匹配损失 TGMLoss
  • 12.青龙面板自动化我的生活
  • 【MySQL】常用SQL--持续更新ing
  • 08RK3568 gpio模拟i2c 配置hym8563 RTC时钟
  • C++设计模式总结-汇总了全部23种设计模式的详细说明
  • 大语言模型在端到端智驾中的应用
  • 机器视觉3D中激光偏镜的优点
  • 专栏:区块链入门到放弃查看目录
  • Java面试33-fail-safe机制与fail-fast机制分别有什么作用
  • Linux:页表详解(虚拟地址到物理地址转换过程)
  • Dart 语法
  • 字符串-JS