4 联合编程

4 联合编程

C#连接相机

  1. 添加相关的VisionPro控件

    1. 打开vs
    2. 在工具箱中右键 => 选择项 => 勾选CogAcqFifoEditV2(配置相机)、CogRecordDisplay(图片展示工具)​​
  2. 将上面添加的两个控件都拖到窗体的合适位置

  3. 隐藏代码中配置如下代码

    // 取相工具
    CogAcqFifoTool acqFifoTool = new CogAcqFifoTool();
    // 窗体加载事件
    private void Form1_Load(object sender, EventArgs e)
    {
    // 设置相机配置工具的工作目标为取相工具
    acqFifoTool.Subject = cogAcqFifoTool1;
    }
    // 拍照按钮点击事件
    private void button1_Click(object sender, EventArgs e)
    {
    // 运行取相工具
    acqFifoTool.Run();
    // 获取取相工具的输出图像并赋值给图像展示工具
    cogRecordDisplay1.Image = acqFifoTool.OutputImage;
    // 自适应
    cogRecordDisplay1.Fit();
    }
    // 窗体关闭事件
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
    // 如果取相工具有相机
    if (acqFifoTool.Operator != null)
    {
    // 应该将相机释放
    acqFifoTool.Operator?.FrameGrabber.Disconnect(false);
    }
    }

使用ICogFrameGrabber连接相机

  • CogFrameGrabbers fgs = new CogFrameGrabbers();​ 获取所有图像采集设备,可迭代,有索引器

  • ICogFrameGrabber.Disconnect(false)​ 释放相机,应该在窗体关闭的事件中释放所有相机的连接

  • ICogAcqFifo fifo = grabber.CreateAcqFifo("Generic GigEVision (Mono)", CogAcqFifoPixelFormatConstants.Format8Grey, 0, true)​ 创建图像采集对象,并配置相关信息

    • 参数1:视频格式
    • 参数2:采集图像类型
    • 参数3:是否自动准备
  • ICogAcqFifo.Complete​事件,图像采集完成将会触发该事件

  • ICogAcqFifo.GetFifoState(out int numPending, out int numReady, out bool busy)​ 获取FIFO状态,包括待处理和已准备图像数量以及是否繁忙

  • ICogAcqFifo.CompleteAcquireEx(CogAcqInfo)​ 获取当前采集的图像

  • ICogAcqFifo.StartAcquire()​ 开始进行图像采集,采集完成将会触发Complete事件

  • int ICogAcqFifo.OwnedExposureParams.Exposure​ 读取或这是图像采集对象的曝光度

  • double ICogAcqFifo.OwnedContrastParams.Contrast​ 读取或这是图像采集对象的对比度(范围0-1)

  • CogRecordDisplay.StartLiveDisplay(ICogAcqFifo)​ 在该控件上进行实时图像采集

  • CogRecordDisplay.StopLiveDisplay()​ 停止实时采集

下面是一个连接相机、拍照、实时预览、设置曝光、设置对比度的示例

// 存储所有的采集设备信息
CogFrameGrabbers fgs;
// 存储当前选中的采集设备信息
ICogFrameGrabber grabber;
// 存储由采集设备创建的图像抓取对象
ICogAcqFifo fifo;
// 窗体加载时
private void Form1_Load(object sender, EventArgs e)
{
// 获取所有的可用设备
fgs = new CogFrameGrabbers();
// 循环添加到下拉菜单中
foreach (ICogFrameGrabber item in fgs)
{
comboBox1.Items.Add(item.Name);
}
}
// 下拉菜单选项变化时
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedIndex != -1 && fgs.Count != 0)
{
// 获取当前选中的采集设备信息
grabber = fgs[comboBox1.SelectedIndex];
// 创建图像采集对象,并配置
// 参数1:视频格式
// 参数2:采集图像类型
// 参数3:是否自动准备
fifo = grabber.CreateAcqFifo("Generic GigEVision (Mono)", CogAcqFifoPixelFormatConstants.Format8Grey, 0, true);
// 监听Complete事件,图像采集完成将会触发该事件
fifo.Complete += Fifo_Complete;
}
}
private void Fifo_Complete(object sender, CogCompleteEventArgs e)
{
// 获取FIFO状态,包括待处理和已准备图像数量以及是否繁忙
fifo.GetFifoState(out int numPending, out int numReady, out bool busy);
// 如果已准备图像数量大于0
if(numReady > 0)
{
// 停止实时显示
cogRecordDisplay1.StopLiveDisplay();
// 获取并显示已准备好的图像
cogRecordDisplay1.Image = fifo.CompleteAcquireEx(new CogAcqInfo());
}
}
private void button1_Click(object sender, EventArgs e)
{
if (fifo == null) return;
fifo.StartAcquire(); // 开始进行图像采集,采集完成将会触发Complete事件
}
private void button2_Click(object sender, EventArgs e)
{
// 开始实时预览
cogRecordDisplay1.StartLiveDisplay(fifo);
}
private void button3_Click(object sender, EventArgs e)
{
// 停止实时预览
cogRecordDisplay1.StopLiveDisplay();
}
private void button4_Click(object sender, EventArgs e)
{
int bg = int.Parse(textBox1.Text);
// 设置曝光
fifo.OwnedExposureParams.Exposure = bg;
}
private void button6_Click(object sender, EventArgs e)
{
double dbd = double.Parse(textBox3.Text);
// 设置对比度(范围0-1)
fifo.OwnedContrastParams.Contrast = dbd;
}

posted @   讨厌敲代码的老郭  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示