一、在Visual Studio的工具箱中加入VisionPro的控件

这部分直接参考:https://blog.csdn.net/qq_41375318/article/details/103600406
加入完成后,如下图:
在这里插入图片描述

二、使用VisionPro的控件进行二次开发

1.准备事项

VisionPro:CogToolBlock工具的VPP(一般开发中使用的都是CogToolBlock工具的VPP,需要运行的过程在CogToolBlock中做好,然后保存)
注意:我这里可以连接并使用相机,不能用的可以使用CogImageFileTool工具
在这里插入图片描述
Form窗体:二次开发一般只需显示运行结果图片,我使用的是CogRecordDisplay
在这里插入图片描述

2.代码编写

1、添加引用

当你向窗体加入CogRecordDisplay控件时,会自动引用一部分,但仍需要自己添加所需的引用
在这里插入图片描述

2、代码

视觉系统使用VisionPro的大概步骤

//1、加载VPP
CogToolBlock cogToolBlock = (CogToolBlock)CogSerializer.LoadObjectFromFile("...\\VPP\\IDRead.vpp");
//2、运行VPP
cogToolBlock.Run();
//3、获取VPP中的工具(CogIDTool1)
CogIDTool cogIDTool = (CogIDTool)cogToolBlock.Tools["CogIDTool1"];
//4、获取CogIDTool1里面LastRunRecord的第一项(也就是需要在窗体显示的图片)
cogRecordDisplay1.Record = cogIDTool.CreateLastRunRecord().SubRecords[0];
//是否图片自fill于cogRecordDisplay1
cogRecordDisplay1.Fit(true);

//需要某些工具中的数据,单独拿出来,类似于VisionPro的脚步

在这里插入图片描述

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Cognex.VisionPro;
using Cognex.VisionPro.ID;
using Cognex.VisionPro.ToolBlock;

namespace IDRead
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

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

        private void button1_Click(object sender, EventArgs e)
        {
            RunOnceJob();
            SaveImg(cogRecordDisplay1,"D:\\images\\");//保存图片
        }

        #region VisionPro
        public CogToolBlock cogToolBlock;
        public string path = Application.StartupPath + @"\\VPP\\IDRead.vpp";

        /// <summary>
        /// 加载vpp
        /// </summary>
        public void LoadVPP()
        {
            if (File.Exists(path))
            {
                cogToolBlock = (CogToolBlock)CogSerializer.LoadObjectFromFile(path);
            }
        }

        /// <summary>
        /// 单次运行Job
        /// </summary>
        public void RunOnceJob()
        {
            cogToolBlock.Run();
            CogIDTool cogIDTool = (CogIDTool)cogToolBlock.Tools["CogIDTool1"];
            //获取组里面LastRunRecord的第一项
            cogRecordDisplay1.Record = cogIDTool.CreateLastRunRecord().SubRecords[0];// cogToolBlock.CreateLastRunRecord().SubRecords[0];
            cogRecordDisplay1.Fit(true);
        }
        #endregion
        
        /// <summary>
        /// 窗体关闭前
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            //释放资源(使用了相机)
            CogFrameGrabbers frameGrabbers = new CogFrameGrabbers();
            foreach (ICogFrameGrabber fg in frameGrabbers)
                fg.Disconnect(false);
        }
       
        /// <summary>
        /// 保存图像
        /// </summary>
        /// <param name="cogRecordDisplay">vision pro 显示窗体</param>
        /// <param name="path">图片存入路径</param>
        private void SaveImg(CogRecordDisplay cogRecordDisplay, string path)
        {
            if (cogRecordDisplay.Image == null)   //判断是否有图片
                return;
            if (!Directory.Exists(path))    //如果没有同名文件夹,就创建一个文件夹
            {
                Directory.CreateDirectory(path);
            }
            //保存图片至文件(24位位图)
            Image image = default(Image);
            image = cogRecordDisplay.CreateContentBitmap(Cognex.VisionPro.Display.CogDisplayContentBitmapConstants.Image, null, 0);
            image.Save(path + DateTime.Now.ToString("yyyyMMddhhmmssff") + ".bmp", ImageFormat.Bmp)//路径、时间、格式
        }
    }


        
       //保存vpp
       //CogSerializer.SaveObjectToFile(cogToolBlockEditV21.Subject, "path");

}

三、展示

在这里插入图片描述

四、可能出现的问题

1、加载的vpp的类型不一致

在这里插入图片描述

2、平台运行时32位(加载Vpp是需要平台位64位运行)

在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐