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

链接相机,加载tb,检测

FrameGrabber链接相机拍照

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();
        }
    }
}






设置曝光

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

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

  }

释放相机

  //释放相机
  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

 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

 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;
  }

手动选择图片路径

 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并运行工具

//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;
  }

检测获取结果

 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/605166.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里云VOD视频点播流程(2)

二、视频点播 1、入门代码 基于OSS原生SDK上传 &#xff0c;参考文档&#xff1a;https://help.aliyun.com/zh/vod/user-guide/upload-media-files-by-using-oss-sdks?spma2c4g.11186623.0.0.1f02273fj4lxNJ 视频点播面向开发者提供了丰富的上传方式&#xff0c;其中上传SDK&…

软件测试实战项目(含电商、银行、APP等)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 今天给大家带来几个软件测试项目的实战总结及经验&#xff0c;适…

ps5电玩计时收费系统软件教程,电玩店适合的计时器,电脑定时语音提醒

ps5电玩计时收费系统软件教程&#xff0c;电玩店适合的计时器&#xff0c;电脑定时语音提醒 一、前言 以下软件操作教程以&#xff0c;佳易王电玩计时计费管理软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、计时计费功能&#xff1a;只…

PHPStudy 访问网页 403 Forbidden禁止访问

涉及靶场 upload-labd sqli-labs pikachu dvwa 以及所有部署在phpstudy中的靶场 注意&#xff1a;一定要安装解压软件 很多同学解压靶场代码以后访问报错的原因是&#xff1a;电脑上没有解压软件。 这个时候压缩包看起来就是黄色公文包的样子&#xff0c;右键只有“全部提取…

SpringCloud Alibaba Sentinel 修改Dashboard用户名和密码

目录 一、下载Sentinel的Jar包 二、在启动时修改用户名和密码的命令 三、测试登录成功 在网上找到了一大堆文章&#xff0c;没一个有用的&#xff0c;最终还是通过不断测试找到了这个方法。 一、下载Sentinel的Jar包 Releases alibaba/Sentinel GitHub 二、在启动时修改…

设计模式:命令模式

文章目录 一、什么是命令模式二、命令模式结构三、命令模式实现步骤四、命令模式应用场景 一、什么是命令模式 它允许将请求封装为对象&#xff0c;一个请求对应于一个命令&#xff0c;将发出命令的责任和执行命令的责任分割开。每一个命令都是一个操作&#xff1a;请求的一方…

【管理咨询宝藏93】大型制造集团数字化转型设计方案

【管理咨询宝藏93】大型制造集团数字化转型设计方案 【格式】PDF版本 【关键词】国际咨询公司、制造型企业转型、数字化转型 【核心观点】 - 235页大型制造型集团数字化转型方案设计&#xff01;细节非常详尽&#xff0c;图表丰富&#xff01; - 系统架构必须采用成熟、具有国…

JS数组操作基础

1、JS数组常用方法 2、函数使用实例 2.1 concat() 功能&#xff1a;可以合并一个或多个数组&#xff0c;返回合并数组之后的数据&#xff0c;不会改变原来的数组 var str1 [12,3,"hello"]; var str2 ["world",123]; console.log(str1,concat(str2)); …

leetcode--560和为k的子数组

问题 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xff1a;nums [1,2…

IP协议,网络层

一、IP协议报文 在网络层最主要的协议是IP协议&#xff0c;网络层的主要任务是进行&#xff1a;1.地址管理 2.路由选择 地址管理&#xff1a;使用一套地址体系&#xff0c;描述互联网中每个设备所处的位置。 IP地址有两个版本&#xff0c;1.IPV4 2.IPV6 &#xff0c;IP…

基于STM32F103ZE平台分析FreeRtos(九)——协程

目录 一、协程简介 二、协程工作机制 2.1 协程控制块结构 2.2 协程管理方式 2.3 协程调度方式 2.4 协程通信机制 三、协程状态及状态切换 3.1 协程状态 3.2 状态切换 四、协程创建 五、协程调度分析 5.1 源码分析 5.2 逻辑图分析 六、协程通信 6.1 协程发送消息…

Edge的使用心得和深度探索-Sider: ChatGPT 侧边栏

作为一款备受欢迎的网络浏览器&#xff0c;Microsoft Edge在用户体验和功能方面都有着诸多优势。在长期的使用中&#xff0c;我总结出了三条使用心得&#xff0c;同时也发现了三个能够极大提高效率的功能。让我们一起深度探索Edge的潜力吧&#xff01; 使用心得&#xff1a; 界…

Android 10.0 Launcher3定制folder文件夹2x2布局之一xml文件配置和解析相关属性

1.前言 在10.0的系统rom产品定制化开发中,在对Launcher3的folder文件夹功能定制中,要求folder文件夹跨行显示,就是 2x2布局显示,默认的都是占1格的,现在要求占4格显示,系统默认是不支持显示4格的,所以接下来需要分析相关的 功能,然后来实现这个功能 2.Launcher3定制fo…

C# WCF服务(由于内部错误,服务器无法处理该请求。)

由于内部错误&#xff0c;服务器无法处理该请求。有关该错误的详细信息&#xff0c;请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 <serviceDebug> 配置行为)以便将异常信息发送回客户端&#xff0c;或打开对每个 Microsoft .NET …

Windows+Linux的虚拟串口工具

文章目录 1.Windows虚拟串口工具1.1 安装教程1.2 使用方法 2.Linux系统虚拟串口工具2.1 socat安装2.2 开启虚拟串口2.3 测试2.3.1 命令测试2.3.2 Cutecom工具测试 2.4 关闭虚拟串口 3.参考资料 1.Windows虚拟串口工具 下载地址&#xff1a;https://www.downxia.com/downinfo/4…

CCF-Csp算法能力认证, 202303-1重复局面(C++)含解析

前言 推荐书目&#xff0c;在这里推荐那一本《算法笔记》&#xff08;胡明&#xff09;&#xff0c;需要PDF的话&#xff0c;链接如下 「链接&#xff1a;https://pan.xunlei.com/s/VNvz4BUFYqnx8kJ4BI4v1ywPA1?pwd6vdq# 提取码&#xff1a;6vdq”复制这段内容后打开手机迅雷…

解决springboot项目的网站静态页面显示不全问题

在通过springboot搭建项目时&#xff0c;为了能够访问静态的前端页面&#xff0c;我们考虑到访问的优先级问题&#xff0c;通常选择将资源放在recourses/static的目录下&#xff0c;如下&#xff1a; 这时可能会出现类似于下面这种图片无法加载、没有按照指定位置显示的情况&am…

Python-100-Days: Day09 Object-oriented programming(OOP) Upgrade

1.property装饰器 之前有讨论过&#xff0c; Python中属性和方法访问权限的问题&#xff0c;不建议将属性设置为私有的&#xff0c;倘若直接将属性暴露给外界也是存在问题的。例如&#xff0c;我们没有办法检查赋给属性的值是否有效。之前的建议是将属性命名以单下划线开头&am…

【线性代数】俗说矩阵听课笔记

基础解系的概念 31线性相关&#xff0c;线性无关&#xff0c;拓展与证明 n个m维向量在n<m时可能线性相关也可能线性无关&#xff0c;线性无关时可以构成某个m维空间的一组基。m不小于n时&#xff0c;秩小于n则线性相关。 n个m维向量在n>m时可一定线性相关。低维向量一定…

microsoft的azure语音,开发环境运行正常,发布到centos7线上服务器之后,无法运行

最近在做AI语音对话的功能&#xff0c;用到了azure的语音语音服务&#xff0c;开发的时候还算顺利&#xff0c;部署到线上后&#xff0c;发现在正式服上无法完成语音转文本的操作&#xff0c;提示&#xff1a; org.springframework.web.util.NestedServletException: Handler d…
最新文章