摘要

在对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. c#操作可道云api帮助类

    代码: public class KodCloudHelper { static readonly string kodCloudUrl = Configs.GetString("KodCl ...

  2. C++基础——文件逐行读取与字符匹配

    技术背景 用惯了python,对其他语言就比较的生疏.但是python很多时候在性能上比较受局限,这里尝试通过C++来实现一个文件IO的功能,看看是否能够比python的表现更好一些.关于python ...

  3. C++ primer plus读书笔记——第2章 开始学习C++

    第2章 开始学习C++ 1. endl确保程序继续运行前刷新输出(将其立即显示在屏幕上),而使用"\n"不提供这样的保证,这意味着在有些系统中,有时可能在您输入信息后才会出现提示. ...

  4. Visual Lab Online —— Alpha版本发布声明

    Visual Lab Online -- Alpha版本发布声明 项目 内容 班级:北航2020春软件工程 博客园班级博客 作业:Alpha阶段发布声明 发布声明 目录 Visual Lab Onli ...

  5. 墙裂推荐一波mysql学习资源

    在日常工作与学习中,无论是开发.运维.测试,还是架构师,数据库是一门必不可少的"必修课", 也是必备的涨薪神器.在互联网公司中,开源数据库用得比较多的当属 MySQL 了. 但my ...

  6. [DB] Spark Streaming

    概述 流式计算框架,类似Storm 严格来说不是真正的流式计算(实时计算),而是把连续的数据当做不连续的RDD处理,本质是离散计算 Flink:和 Spark Streaming 相反,把离散数据当成 ...

  7. [BD] Sqoop

    什么是Sqoop 数据交换工具(ETL):RDBMS(MySQL.Oracle等)<-->Sqoop<-->HDFS(HBase.Hive等) 基于JDBC 执行数据交换时,本 ...

  8. 用nvm的方式安装node

    一.nvm简介 Node Version Manager(Node版本管理工具)由于以后的开发工作可能会在多个Node版本中测试,而且Node的版本也比较多,所以需要这么款工具来管理.   nvm的安 ...

  9. 折腾gcc/g++链接时.o文件及库的顺序问题

    gcc/g++链接时.o文件以及库的顺序问题 1 写在前面 最近换了xubuntu12.4,把原来的项目co出来编译的时候报"undefined reference to".猜测是 ...

  10. MySQL配置HeartBeat实现心跳监控和浮动IP

    1. 初始化环境配置 /sbin/chkconfig --add mysqld /sbin/chkconfig mysqld on ln -s /usr/local/mysql/bin/mysql / ...