vs联合halcon——采集图像(实时采集与单次采集)
摘要
在对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界面皮肤呢?
- 下载IrisSkin4.dll以及皮肤包
- 解压。将IrisSkin4.dll与Skins(皮肤)一起拷贝到项目的\bin\Debug文件夹下
- 在程序的资源管理器中的【引用】上单击右键,选择【添加引用】,找到刚才复制过来的IrisSkin4.dll文件,点击【确定】
- 点击菜单栏中的【工具】——>【选择工具箱项——>【.NET Framework组件】——>【浏览】——>找到IrisSkin4.dll——>点击【确定】,SkinEngine控件加入到工具箱 把控件添加进程序的主窗体(最简单的方法就是直接把IrisSkin4.dll文件用鼠标拖动到【浏览】界面即可)
- 在主窗体的构造函数中编辑一行代码选择皮肤,即可完成渲染。
skinEngine1.SkinFile = System.Environment.CurrentDirectory+ "\\Skins\\Calmness.ssk";
如果有需要IrisSkin4.dll以及皮肤包,可在下方评论留言。
vs联合halcon——采集图像(实时采集与单次采集)的更多相关文章
- Halcon WPF C#采集图像区域灰度值
源码下载地址:https://github.com/lizhiqiang0204/ImageGray.git Halcon代码如下: *读取图片,转换成灰度图片 read_image (Image1, ...
- Halcon采集图像Image Acquisition解析
很明显,图像的采集是所有机器视觉应用中必须解决的问题,HALCON提供了为各种图像采集设备执行这种交互的接口,图像采集的任务被简化为几行代码,只需几个操作符的调用,更重要的是,这种简单并不是以限制可用 ...
- 6.MIL采集和实时显示
前面讲到的都是离线的图像获取方法,实际中我们做机器视觉都是在线采集图像和处理,处理结果决定了计算机要给出的控制信号如电机运动等,这样就实现了实时视觉反馈运动.MIL中的采集需要Matrox采集板卡的支 ...
- camera按键采集图像及waitKey的用法(转)
源: camera按键采集图像及waitKey的用法
- camera按键采集图像及waitKey的用法
前言 项目需要通过摄像头采集图像并保存,主要是用于后续的摄像头标定.实现过程其实很简单,需要注意一些细节. 系统环境 系统版本:ubuntu16.04:opencv版本:opencv2.4.13:编程 ...
- Camera 采集图像的方法
使用 Camera 采集图像, 实现步骤如下: 需要权限: android.permission.CAMERA android.permission.WRITE_EXTERNAL_STORAGE // ...
- rsync+inotify实时数据同步单目录实战
rsync+inotify实时数据同步单目录实战 rsync+inotify实时数据同步单目录实战 inotify是一个强大的.细粒度的.异步的文件系统事件监控机制,linux内核从2.6.13起 ...
- halcon连续采集图像
dev_close_window()dev_update_window('off')create_bar_code_model ([], [], BarCodeHandle)dev_open_wind ...
- Vmware Vsphere WebService之vijava 开发(二)一性能信息的采集(实时监控)
最近一直没有更新这部分的内容,会利用五一时间完成vcenter这一个系列. 这里先给大家一本关于vijava开发的书,比较实用. 地址:http://pan.baidu.com/s/1gfkl9mj. ...
随机推荐
- opencv——形态学深究(分析和应用)
摘要: 形态学一般指生物学中研究动物和植物结构的一个分支.用数学形态学(也称图像代数)表示以形态为基础对图像进行分析的数学工具. 基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对 ...
- 【python】读取和输出到txt
读取txt的数据和把数据保存到txt中是经常要用到的,下面我就总结一下. 读txt文件python常用的读取文件函数有三种read().readline().readlines() 以读取上述txt为 ...
- Linux系统(控制节点)部署环境
环境部署 重点说明:安装ansible时去控制Windows机器,由于需要在Linux系统上安装pywinrm插件,而使用yum安装锝ansible是无法调用pywinrm插件,所以整体使用pip工具 ...
- 006.Python循环语句while循环
循环结构 优点 减少代码冗余 提升效率 while循环 语法结构 while 条件表达式: 循环体 code1 code2 打印0-100 i = 0 while i <= 100: print ...
- 用JILINK 下载HEX文件
https://wenku.baidu.com/view/f51300f55f0e7cd1842536e1.html
- Linux系统添加永久静态路由的方法(包含Centos7)
一.使用route命令添加 使用route 命令添加的路由,机器重启或者网卡重启后路由就失效了,方法:A.添加到主机的路由# route add –host 192.168.1.10 dev eth0 ...
- golang快速入门(五)初尝web服务
提示:本系列文章适合对Go有持续冲动的读者 初探golang web服务 golang web开发是其一项重要且有竞争力的应用,本小结来看看再golang中怎么创建一个简单的web服务. 在不适用we ...
- 从Lombok到JSR-269
前言 Lombok的出现帮助开发人员在开发工程中消除了大部分冗余代码:繁琐的get.set方法甚至建造者模式. Lombok的实现方式是什么呢? 新建一个测试类使用Lombok的Getter和Sett ...
- [论文阅读笔记] Unsupervised Attributed Network Embedding via Cross Fusion
[论文阅读笔记] Unsupervised Attributed Network Embedding via Cross Fusion 本文结构 解决问题 主要贡献 算法原理 实验结果 参考文献 (1 ...
- Linux系统挂载NFS文件系统
https://help.aliyun.com/document_detail/90529.html?spm=a2c4g.11186623.6.570.43212f30T5yM4w