Halcon学习笔记(2) VS2010 + Halcon12 C#链接相机

1.打开Halcon, 使用图像采集助手获取相机实时图像:

  

  1.1 获取实时图像:

      

  1.2 插入采集实时图像的Halcon代码,并导出:

    

    

    Image_acq.cs代码:

    

//
//  File generated by HDevelop for HALCON/DOTNET (C#) Version 12.0
//
//  This file is intended to be used with the HDevelopTemplate or
//  HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c#

using System;
using HalconDotNet;

public partial class HDevelopExport
{
  public HTuple hv_ExpDefaultWinHandle;

  // 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("GigEVision", 0, 0, 0, 0, 0, 0, "default", -1,
        "default", -1, "false", "default", "e0508b2e4c36_DahuaTechnology_A5201MG50",
        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();

  }

  public void InitHalcon()
  {
    // Default settings used in HDevelop
    HOperatorSet.SetSystem("width", 512);
    HOperatorSet.SetSystem("height", 512);
  }

  public void RunHalcon(HTuple Window)
  {
    hv_ExpDefaultWinHandle = Window;
    action();
  }

}

2. 在c#项目中画好对应的按钮:

  

  对采集/停止按钮 执行方法进行编程(注意头部添加using HalconDotNet;  用到线程还要添加:using System.Threading;):

  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;

using System.Threading;

namespace demo4
{
    public partial class Form1 : Form
    {
        HObject ho_Image = null;
        HTuple hv_AcqHandle = null;

        public Form1()
        {
            InitializeComponent();
        }

        Thread dispig;

        //采集
        private void button1_Click(object sender, EventArgs e)
        {
            dispig = new Thread(showFrame);
            dispig.Start();
        }
        //停止
        private void button2_Click(object sender, EventArgs e)
        {
            dispig.Abort();
            HOperatorSet.CloseFramegrabber(hv_AcqHandle);
        }

        void showFrame()
        {
            // Initialize local and output iconic variables
            HOperatorSet.GenEmptyObj(out ho_Image);
            //Image Acquisition 01: Code generated by Image Acquisition 01
            HOperatorSet.OpenFramegrabber("GigEVision", 0, 0, 0, 0, 0, 0, "default", -1,
                "default", -1, "false", "default", "e0508b2e4c36_DahuaTechnology_A5201MG50",
                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.DispObj(ho_Image, hWindowControl1.HalconWindow);
            }
            HOperatorSet.CloseFramegrabber(hv_AcqHandle);
            ho_Image.Dispose();
        }
    }
}

  在Debug文件下添加“halcon.dll”文件,把目标平台改成“Any CPU”之后执行,结果还是出错:

  

  该错误是因为Debug目录下没有Halcon加载相机的相关dll导致,为了方便,我们将“HALCON-12.0\bin\x64-win64”目录下的所有dll拷贝到Debug文件下,然后再次执行采集按钮:

  

  

  按停止后图像不采集。

  大功告成!

后续:

  上面图像并没有完全显示,而是受到随意拉动HWindowControl空间后缩放的影响,我们注意HWindowControl的如下两个属性(红圈):

  其中两个值已经是我改过来的,因为我使用的相机是1920*1200的。 ImagePart表示采集相机图像的尺寸,Size属性表示空间HWindowControl的尺寸,把Size的长宽比与采集的图像长宽比保持一致即可:

  

  大功告成!

  

  

  

时间: 2024-11-07 17:41:08

Halcon学习笔记(2) VS2010 + Halcon12 C#链接相机的相关文章

Halcon学习笔记之支持向量机(二)

例程:classify_halogen_bulbs.hdev 在Halcon中模式匹配最成熟最常用的方式该署支持向量机了,在本例程中展示了使用支持向量机对卤素灯的质量检测方法.通过这个案例,相信大家可以对支持向量机的使用有一个更加清晰的了解.在相当多的检测和识别的应用中,都可以使用相同的方法来解决分类问题. 图1. 卤素灯图像 大致原理: 一.准备阶段:描述样本 1. 准备好两组卤素灯图像样本,好坏的各若干张图像: 2. 对样本图像进行分割,获取卤素灯关键部位区域: 3. 选择合适的对图像的描述

cocos2dx学习笔记(4)——VS2010中的中文乱码问题

当你想使用中文时,你是否有这样的一个困惑. 把样例中的HelloWorld改成中文的 "你好,世界!". 然后编译运行,发现居然是个乱码!!! 因为cocos2dx中使用的是UTF-8字符集,而VS中确实ANSI. 所以我们需要对其进行字符集转换. 然后纵里寻它求百度,终于找到了解决方案. 一个函数搞定! #include "cocos2d.h" char* toUTF(const char* strGB2312) { int iLen = MultiByteToW

Halcon学习笔记——机器视觉应用工程开发思路及相机标定

机器视觉应用工程开发思路 机器视觉应用工程主要可划分为两大部分,硬件部分和软件部分. 1.硬件部分,硬件的选型至关重要,决定了后续工作是否可以正常开展,其中关键硬件部分包括:光源,相机以及镜头. 2.软件部分,目前业内商业库主要有Halcon,康耐视,DALSA,evision,NI等,开源库有OpenCV.其中NI的labview+vision模块. 机器视觉应用工程大致开发思路:       一.获取图像              图像采集可以来源多个途径,用算子read_image去读取图

HTML之学习笔记(六)添加链接

html添加链接所用的标签为<a>标签 语法: 定义:从当前页面,跳转到指定页面或文件的一个标签            <a href="URL">热点文字</a>            URL (Uniform Resource Locator统一资源定位器)            协议://域名或地址/路径/文件名.后缀名?参数#标记            不写    在相应地址找寻文件打开            http   超文本传输协议  

Halcon学习笔记——条形码的定位与识别

一维码的原理与结构 条码基本原理是利用条纹和间隔或宽窄条纹(间隔)构成二进制的"0"和"1",反映的是某种信息. 一维条码数据结构,分四个区域.组成分别为静区.起始/终止符.校验符.数据符. 一维条码的意识形态结构,分三条. 构成一维码的基本单元是模块,模块是指条码中最窄的条或空: 构成条码的条或空称为一个单元,一个单元包含多个或单个模块: 一个单元包含的模块数量由编码方式决定,即形成了不同的码制. 一维码的定位与识别 基本halcon工具算子,create_bar

Halcon学习笔记(一)

一.Halcon编程之图像处理 1.读取图片 1.读取单个图片: 1.1 直接用算子read_image read_image (Image, 'D:/3.tiff') 2.读取多个图片 2.1 定义一个存放图片路径的数组,通过循环读取 imagepath:=[] imagepath[0]:=['D:/1.tiff']imagepath[1]:=['D:/2.tiff']imagepath[2]:=['D:/3.tiff']for Index := 1 to 5 by 1 read_image

halcon学习笔记——(1)单摄像机标定

In the reference manual,operator signatures are visualized in the following way: operator ( iconic input : iconic output : control input : control output ) 在HALCON所有算子中,变量皆是如上格式,即:图像输入:图像输出:控制输入:控制输出. 其中四个参数任意一个可以为空. 控制输入可以是变量.常量.表达式: 控制输出以及图像输入和输出必须

halcon学习笔记&mdash;&mdash;(3)HALCON标定后的二维测量

1.gen_measure_rectangle2( : : Row, Column, Phi, Length1, Length2, Width, Height,Interpolation : MeasureHandle) 产生测量矩形句柄,控制输入为测量矩形范围的坐标中心,矩形长轴和水平方向夹角范围的弧度,矩形边长的一半,测量图片的宽和高度,输出为测量句柄. 2.measure_pairs(Image : : MeasureHandle, Sigma, Threshold, Transition

halcon学习笔记——(11)Image,region,xld初步

一 读取的3种方式: read_image( image,'filename') //image 是输出对象,后面是输入文件的路径和名称 读取多图: 1,申明一个数组,分别保存路径 ImagePath:=[] ImagePath[0]:='D:/1.bmp' ImagePath[1]:='D:/2.bmp' ImagePath[2]:='D:/3.bmp' for i:=0 to 2 by 1 read_image(Image,ImagePath[i]) endfor 2,for 循环 for