摘要

在对vs进行环境配置好以后,就可以开始与halcon联合进行实战。本篇就对图像的采集进行总结。通过构建采集相机GrabImage类的三个方法实现图像的采集:

  • open() 打开相机
  • grabimage() 单次采集图像
  • close() 关闭相机,释放内存

最后用IrisSkin4实现WinForm窗体换皮肤。


先看一下实现的效果:

如何实现呢?


一,创建vs工程,创建 GrabImage类(便于调用)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HalconDotNet; namespace 采集图像
{
public class GrabImage
{
HTuple hv_AcqHandle; //打开相机窗口的引用句柄
HObject ho_Image;//定义图片变量
HTuple imageWidth, imageHeight;//定义宽高 public void open()
{
try
{ HOperatorSet.GenEmptyObj(out ho_Image);// 初始化本地图像空间的变量
//打开本地相机
HOperatorSet.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb",
-1, "false", "default", "[0] Integrated Camera", 0, -1, out hv_AcqHandle);
//开始采集图像
HOperatorSet.GrabImageStart(hv_AcqHandle, -1);
}
catch (Exception)
{ System.Windows.Forms.MessageBox.Show("打开相机失败!");//报错
} }
//构造单次采集图像方法
public void grabimage(HWindowControl HW)
{ //清空窗体halconwindows
HW.HalconWindow.ClearWindow();
//采集图像
HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);
//转成黑白图像
HOperatorSet.Rgb1ToGray(ho_Image, out ho_Image);
//图片自适应窗口
HOperatorSet.GetImageSize(ho_Image, out imageWidth, out imageHeight);
HOperatorSet.SetPart(HW.HalconWindow, 0, 0, imageHeight - 1, imageWidth - 1);
//显示图像
HOperatorSet.DispObj(ho_Image, HW.HalconWindow);
//以当前日期保存图像到D盘下
//HOperatorSet.WriteImage(ho_Image, "png", 0, "D:\\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss"));
ho_Image.Dispose(); }
//关闭相机,释放内存
public void close()
{
ho_Image.Dispose();
HOperatorSet.CloseFramegrabber(hv_AcqHandle); }
}
}

二,编写winform界面



三,编写主窗体Form1程序


using System;
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; namespace 采集图像
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); }
GrabImage grabimg = new GrabImage();//实例化GrabImage类 private void Form1_Load(object sender, EventArgs e)
{
skinEngine1.SkinFile = System.Environment.CurrentDirectory+ "\\Skins\\Calmness.ssk";
skinEngine1.DisableTag = 8888;//设置不自动换肤。tag的值8888(默认9999)
grabimg.open();//调用open方法
} private void button1_Click(object sender, EventArgs e)
{
grabimg.grabimage(hWindowControl1);
} private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
grabimg.close();
} private void timer1_Tick(object sender, EventArgs e)
{
grabimg.grabimage(hWindowControl2); }
//实时采集
private void button2_Click(object sender, EventArgs e)
{
timer1.Start();
}
//停止采集
private void button3_Click(object sender, EventArgs e)
{
timer1.Stop();
}
}
}

这里利用了一个timer控件将单次采集变成实时采集(累加计时)。

那么如何修改winform界面皮肤呢?

  1. 下载IrisSkin4.dll以及皮肤包
  2. 解压。将IrisSkin4.dll与Skins(皮肤)一起拷贝到项目的\bin\Debug文件夹下
  3. 在程序的资源管理器中的【引用】上单击右键,选择【添加引用】,找到刚才复制过来的IrisSkin4.dll文件,点击【确定】
  4. 点击菜单栏中的【工具】——>【选择工具箱项——>【.NET Framework组件】——>【浏览】——>找到IrisSkin4.dll——>点击【确定】,SkinEngine控件加入到工具箱 把控件添加进程序的主窗体(最简单的方法就是直接把IrisSkin4.dll文件用鼠标拖动到【浏览】界面即可)
  5. 在主窗体的构造函数中编辑一行代码选择皮肤,即可完成渲染。
skinEngine1.SkinFile = System.Environment.CurrentDirectory+ "\\Skins\\Calmness.ssk";

如果有需要IrisSkin4.dll以及皮肤包,可在下方评论留言。

vs联合halcon——采集图像(实时采集与单次采集)的更多相关文章

  1. Halcon WPF C#采集图像区域灰度值

    源码下载地址:https://github.com/lizhiqiang0204/ImageGray.git Halcon代码如下: *读取图片,转换成灰度图片 read_image (Image1, ...

  2. Halcon采集图像Image Acquisition解析

    很明显,图像的采集是所有机器视觉应用中必须解决的问题,HALCON提供了为各种图像采集设备执行这种交互的接口,图像采集的任务被简化为几行代码,只需几个操作符的调用,更重要的是,这种简单并不是以限制可用 ...

  3. 6.MIL采集和实时显示

    前面讲到的都是离线的图像获取方法,实际中我们做机器视觉都是在线采集图像和处理,处理结果决定了计算机要给出的控制信号如电机运动等,这样就实现了实时视觉反馈运动.MIL中的采集需要Matrox采集板卡的支 ...

  4. camera按键采集图像及waitKey的用法(转)

    源: camera按键采集图像及waitKey的用法

  5. camera按键采集图像及waitKey的用法

    前言 项目需要通过摄像头采集图像并保存,主要是用于后续的摄像头标定.实现过程其实很简单,需要注意一些细节. 系统环境 系统版本:ubuntu16.04:opencv版本:opencv2.4.13:编程 ...

  6. Camera 采集图像的方法

    使用 Camera 采集图像, 实现步骤如下: 需要权限: android.permission.CAMERA android.permission.WRITE_EXTERNAL_STORAGE // ...

  7. rsync+inotify实时数据同步单目录实战

    rsync+inotify实时数据同步单目录实战   rsync+inotify实时数据同步单目录实战 inotify是一个强大的.细粒度的.异步的文件系统事件监控机制,linux内核从2.6.13起 ...

  8. halcon连续采集图像

    dev_close_window()dev_update_window('off')create_bar_code_model ([], [], BarCodeHandle)dev_open_wind ...

  9. Vmware Vsphere WebService之vijava 开发(二)一性能信息的采集(实时监控)

    最近一直没有更新这部分的内容,会利用五一时间完成vcenter这一个系列. 这里先给大家一本关于vijava开发的书,比较实用. 地址:http://pan.baidu.com/s/1gfkl9mj. ...

随机推荐

  1. CentOS6 YUM 源失效问题解决办法

    问题解决 网站好不容易找到一个 Yum 源还能用,地址:https://vault.centos.org/6.9/ 操作简单,把CentOS-Base.repo 里面的东西全部删掉,添加如下内容即可. ...

  2. Sqli-labs-master通关解析(持续更新中。。。)

    大多情况下:SQL注入其实就是构造正确的mysql命令,让网页回显本不应该让我们看到的数据(如用户的账号和密码). 第一关-联合查询注入 查库 // 查看当前页面在的数据库 ?id=-1' union ...

  3. python3 smtplib发送邮件

    使用smtp包发送邮件还依赖email的一些方法 发送邮件主要分为三步: 1,定义邮箱参数:邮箱服务器地址,邮箱用户名,邮箱密码,邮件发送方,邮件接收方,邮件标题,邮件内容 2,配置发送内容 3,实例 ...

  4. SystemVerilog 激励发生器

    simulator(激励发生器) 主要来的职责是模拟与DUT相邻设计的接口协议,只需要关注如何模拟接口信号,时期能够以真实的接口协议来发送激励给DUT. simolator不应该违反协议,但是不约束于 ...

  5. 【JVM进阶之路】十四:类加载器和类加载机制

    在上一章里,我们已经学习了类加载的过程,我们知道在加载阶段需要"通过一个类的全限定名来获取描述该类的二进制字节流",而来完成这个工作的就是类加载器(Class Loader). 1 ...

  6. 在浏览器上运行 VS Code——GitHub 热点速览 v.21.22

    作者:HelloGitHub-小鱼干 和小程序类似,如果平时开发所用到的软件也能运行在浏览器中,"用完即走"岂不妙哉?code-server 便是一个让人在浏览器运行 VS Cod ...

  7. Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化

    前言   Windows上mingw32版本的openssl的编译是属于比较棘手的,OpenSSL本身不提供支持..   OpenSSL 介绍   OpenSSL是一个开放源代码的软件库包,应用程序可 ...

  8. .Net Core自实现CLR异步编程模式(Asynchronous programming patterns)

    最近在看一个线程框架,对.Net的异步编程模型很感兴趣,所以在这里实现CLR定义的异步编程模型,在CLR里有三种异步模式如下,如果不了解的可以详细看MSDN 文档Asynchronous progra ...

  9. Ubuntu1804下k8s-CoreDNS占CPU高问题排查

    1.背景: 最近在ubuntu804上适配k8s的时候,部署到业务pod的时候,出现了服务器卡死,top查看发现负载很高,进行CPU排序发现如下信息,可知是CoreDNS服务导致. 2. 分析排查: ...

  10. IOS 小组件(7):小组件点击交互

    引言   前面我们似乎掌握了实现一个小组件所需要的一切技能,默认情况下桌面点击小组件,也正常跳转到了App中.接下来我们一起来看看,小组件是怎么做到点击跳转到App的. 点击交互方式 点击Widget ...