赞
踩
在本部分开始前建议先了解一下:CogImageFileTool读图-CSDN博客和机器视觉技术与应用实战(Visionpro工具二次开发 01)_visionpro wpf-CSDN博客。
因为本次将利用到这些东西。
你需要在工具箱导入CogRecordDisplay,并且拖到界面里面。同时还要导入一个按钮(button)。
布局大概这样:
为了后面阅读方便,可以修改一下按钮属性(右键布局上的按钮点击“属性”就可以修改):
1、按钮的名字:
2、按钮在你的代码里面的类名:
开始编写代码:
双击按钮其实就可以跳转到代码界面,当然你可以去找.cs后缀的文件打开。
要在解决方案里面引入Cognex.VisionPro.ImageFile。在“扩展”里面找Cognex.VisionPro.ImageFile
废话不多说(c#代码):
- 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.ImageFile;//这个需要引用
-
- namespace WindowsFormsApp1
- {
- public partial class Form1 : Form
- {
- private CogImageFileTool picture;//定义一个CogImageFileTool变量
- public Form1()
- {
- InitializeComponent();
- picture = new CogImageFileTool();//实例化
- }
-
- private void Form1_Load(object sender, EventArgs e)
- {
-
- }
- //按钮点击后功能实现
- private void DisplayImageButton_Click(object sender, EventArgs e)
- {
- picture.Operator.Open("C:\\Users\\12581\\Desktop\\1.jpg", CogImageFileModeConstants.Read);//读图
- picture.Run();
- cogRecordDisplay1.Image = picture.OutputImage;//显示出来
- cogRecordDisplay1.Fit(true);
- }
- }
- }
效果如下:
功能比较简单,可以在这个基础上把连续读图的功能实现。
如果我想调用调用实时视频呢?
这里需要用到线程,一帧一帧获取图像。
线程,它来了!
由于要调用不同类型相机的配置文件,这里就跳过了。
核心代码(不同相机配置不同,读帧大体一致):
private Thread ThreadObject; //声明线程变量
ThreadObject = new Thread(new ThreadStart(ThreadFunction));// //线程对象实例化
- //线程启动
- if (ThreadObject.ThreadState == System.Threading.ThreadState.Unstarted)
- {
- ThreadObject.Start();
- }
- //线程回调函数
- public void ThreadFunction()
- {
- int ImageWidth = 1280;
- int ImageHeight = 1024;
- CogImage8Grey Image = new CogImage8Grey();
- var cogRoot = new CogImage8Root();
- IntPtr ImageBufferPtr = Marshal.AllocHGlobal(ImageWidth * ImageHeight);
- byte[] ImageBuffer = new byte[ImageWidth * ImageHeight];
- while (!ThreadStop)
- {
- //采集单张图像
- SnapAcquisitionSoftTrigger(ref ImageBuffer);
-
- //将图像数据从托管区拷贝到非托管区
- Marshal.Copy(ImageBuffer, 0, ImageBufferPtr, ImageWidth * ImageHeight);
-
- //初始化
- cogRoot.Initialize(ImageWidth, ImageHeight, ImageBufferPtr, ImageWidth, null);
-
- //指定Image图像数据为cogRoot
- Image.SetRoot(cogRoot);
-
- //将图像数据传给cogRecordDisplay1控件
- cogRecordDisplay1.Image = Image as CogImage8Grey;
-
- //显示图像
- cogRecordDisplay1.Fit(true);
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。