C#中打开摄像头(Halcon)
来源:互联网 发布:php授权验证系统2.6.8 编辑:程序博客网 时间:2024/06/08 02:57
C#中打开摄像头(Halcon)
1、halcon中打开摄像头
通过“助手”菜单打开“Image Acquisition”,如图所示,选择“DirectShow”表示普通USB摄像头。
通过“连接、拍照、视频”可以检测是否已经打开。
可以看到图像窗口中已经有视频可以显示,如图
可以选择代码生成,选择插入代码,可以看到在程序编辑区,代码已经插入。
这里是为了在C#中打开摄像头,下面选择代码导出:“文件---->导出”。
打开image_acp.cs代码如下:
//// File generated by HDevelop for HALCON/DOTNET (C#) Version 12.0//using HalconDotNet;public partial class HDevelopExport{#if !(NO_EXPORT_MAIN || NO_EXPORT_APP_MAIN) public HDevelopExport() { // Default settings used in HDevelop HOperatorSet.SetSystem("width", 512); HOperatorSet.SetSystem("height", 512); if (HalconAPI.isWindows) HOperatorSet.SetSystem("use_window_thread","true"); action(); }#endif#if !NO_EXPORT_MAIN // Main procedure private void action() { // Local iconic variables HObject ho_Image=null; // Local control variables HTuple hv_AcqHandle = null; // Initialize local and output iconic variables HOperatorSet.GenEmptyObj(out ho_Image); //Image Acquisition 01: Code generated by Image Acquisition 01 HOperatorSet.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, "false", "default", "[0] USB2.0 PC CAMERA", 0, -1, out hv_AcqHandle); HOperatorSet.GrabImageStart(hv_AcqHandle, -1); while ((int)(1) != 0) { ho_Image.Dispose(); HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1); //Image Acquisition 01: Do something } HOperatorSet.CloseFramegrabber(hv_AcqHandle); ho_Image.Dispose(); }#endif}#if !(NO_EXPORT_MAIN || NO_EXPORT_APP_MAIN)public class HDevelopExportApp{ static void Main(string[] args) { new HDevelopExport(); }}#endif
2、C#中打开摄像头
(1)新建一个C#---WINFORM程序,在窗体上添加Halcon的HWindowControl控件(参照博客:C#(VS2010)调用HALCON12),两个按钮
(2)Form1.cs代码如下:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using HalconDotNet;//添加Halcon空间using System.Threading;namespace 打开摄像头{ public partial class Form1 : Form { //halcon导出的变量 HObject ho_Image = null; HTuple hv_AcqHandle = null; public Form1() { InitializeComponent(); } //定义一个线程 Thread dispig; private void button1_Click(object sender, EventArgs e) {//图像采集 dispig = new Thread(getin); dispig.Start(); } private void button2_Click(object sender, EventArgs e) {//停止 dispig.Abort(); HOperatorSet.CloseFramegrabber(hv_AcqHandle); } void getin() { HOperatorSet.GenEmptyObj(out ho_Image); HOperatorSet.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, "false", "default", "[0] USB2.0 PC CAMERA", 0, -1, out hv_AcqHandle); HOperatorSet.GrabImageStart(hv_AcqHandle, -1); while(true) { HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1); HOperatorSet.DispObj(ho_Image, hWindowControl1.HalconWindow); ho_Image.Dispose(); } } }}
(3)效果如下:
如果视频正在采集中,直接关闭窗体,程序会报错,其实是由于线程正在运行的问题(参照之前的博客:C#----多线程)。为窗体添加一个“FromClosing”事件即可,代码如下:
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (dispig != null) { dispig.Abort(); //结束这个线程 } }
到此,程序完全可以正常运行。
其全部代码如下:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using HalconDotNet;//添加Halcon空间using System.Threading;namespace 打开摄像头{ public partial class Form1 : Form { //halcon导出的变量 HObject ho_Image = null; HTuple hv_AcqHandle = null; public Form1() { InitializeComponent(); } //定义一个线程 Thread dispig; private void button1_Click(object sender, EventArgs e) {//图像采集 dispig = new Thread(getin); dispig.Start(); } private void button2_Click(object sender, EventArgs e) {//停止 dispig.Abort(); HOperatorSet.CloseFramegrabber(hv_AcqHandle); } void getin() { HOperatorSet.GenEmptyObj(out ho_Image); HOperatorSet.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, "false", "default", "[0] USB2.0 PC CAMERA", 0, -1, out hv_AcqHandle); HOperatorSet.GrabImageStart(hv_AcqHandle, -1); while(true) { HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1); HOperatorSet.DispObj(ho_Image, hWindowControl1.HalconWindow); ho_Image.Dispose(); } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (dispig != null) { dispig.Abort(); //结束这个线程 } } }}
2 0
- C#中打开摄像头(Halcon)
- vs+halcon 打开摄像头失败
- halcon与C#混合编程(一)打开一张图片
- halcon与C#混合编程(一)打开一张图片
- qt中打开摄像头
- C#使用aforge框架打开摄像头(续)
- C#打开摄像头 与发送邮件
- C#打开摄像头抓取照片然后退出
- C#打开电脑摄像头及拍照
- C#中调用Halcon导出类
- 如何在Win7中打开摄像头
- 解决matlab代码中打开摄像头错误
- opencv中打开摄像头显示黑屏
- Unity中 高通ar打开摄像头
- 解决matlab代码中打开摄像头错误
- 在opencv3.2中打开摄像头
- 打开摄像头
- 打开摄像头
- Hibernate延迟加载和即时加载
- 工具栏和菜单
- mongodb及可视化工具安装使用
- react native与Android开发调试
- L1-027. 出租
- C#中打开摄像头(Halcon)
- 802.1x技术介绍
- Android studio报错:app:mergeDebugResources FAILED(记一次痛苦不堪的debug)
- Java之this关键字区分局部变量和成员变量
- devops开发模式
- ios上LaunchImage 在模拟器上显示但在真机上不显示
- 前端框架Aurelia
- 【HDU3364】Lanterns-高斯消元求异或方程组的解数
- windows平台MiKTex+Atom