https://www.cnblogs.com/badguy518/p/5515068.html
这篇主要是C#和Halcon的混合编程,在此基础上对按键不同功能的划分,以及图片适应窗口和从本地打开图片。
新手来这里:http://www.cnblogs.com/badguy518/p/5515054.html
halcon源程序:
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
read_image (Image, 'C:/Users/Administrator/Desktop/猫.jpg')
dev_display(Image)
get_image_size(Image, Width, Height)
rgb3_to_gray(Image, Image, Image, ImageGray)
dev_display(ImageGray)
注意:写halcon程序时,如果过程中的图片需要显示出来,则需要在每个过程中都添加dev_display(**)

第一步:导出C#程序,建立项目,并添加此类

//
//  File generated by HDevelop for HALCON/DOTNET (C#) Version 10.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, ho_ImageGray;
    // Local control variables 
    HTuple hv_Width, hv_Height;
    // Initialize local and output iconic variables 
    HOperatorSet.GenEmptyObj(out ho_Image);
    HOperatorSet.GenEmptyObj(out ho_ImageGray);
    //dev_open_window(...);
    ho_Image.Dispose();
    HOperatorSet.ReadImage(out ho_Image, "C:/Users/Administrator/Desktop/猫¨.jpg");
    HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);
    HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
    ho_ImageGray.Dispose();
    HOperatorSet.Rgb3ToGray(ho_Image, ho_Image, ho_Image, out ho_ImageGray);
    HOperatorSet.DispObj(ho_ImageGray, hv_ExpDefaultWinHandle);
    ho_Image.Dispose();
    ho_ImageGray.Dispose();
  }
  public void InitHalcon()
  {
    // Default settings used in HDevelop 
    HOperatorSet.SetSystem("do_low_error", "false");
  }
  public void RunHalcon(HTuple Window)
  {
    hv_ExpDefaultWinHandle = Window;
    action();
  }
}

第二步:布局设计

本程序需要显示图片的halconWindow控件和读图以及处理图片的两个button控件;如下图:

第三步:将导出的类进行框架分解

如果想在程序中添加不同的按键,比如一个用来打开图片,一个用来处理图片,则就需要将halcon导出的类进行分解;
框架如下:
//定义变量
//初始化halcon
 public void InitHalcon()
  {
   //初始化halcon程序
  }
//读取图片
public void ReadPicture(HTuple Window)
{
//读图程序
}
//处理图片
 public void Process()
{
//处理程序
}

第四步:填补框架

将对应框架下得程序进行填补操作(下边程序可以代替public partial class HDevelopExport下的所有程序):
//定义变量
public HTuple hv_ExpDefaultWinHandle;
HObject ho_Image, ho_ImageGray;
HTuple hv_Width, hv_Height;
//初始化halcon
public void InitHalcon()
  {
    // Default settings used in HDevelop 
    HOperatorSet.SetSystem("do_low_error", "false");
  }
public void ReadPicture(HTuple Window)
{
    //读图并显示
   hv_ExpDefaultWinHandle = Window;
   HOperatorSet.GenEmptyObj(out ho_Image);
    ho_Image.Dispose();
    HOperatorSet.ReadImage(out ho_Image, "C:/Users/Administrator/Desktop/猫¨.jpg");
    HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);
    HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);

}
 public void Process()
{
    //处理程序
   HOperatorSet.GenEmptyObj(out ho_ImageGray);
    ho_ImageGray.Dispose();
    HOperatorSet.Rgb3ToGray(ho_Image, ho_Image, ho_Image, out ho_ImageGray);
    HOperatorSet.DispObj(ho_ImageGray, hv_ExpDefaultWinHandle);
    ho_Image.Dispose();
    ho_ImageGray.Dispose();

}

第五步:在主程序Form1.cs中添加程序:

①在主程序Form1的类下对刚才添加的类进行实例化:
HDevelopExport hd = new HDevelopExport();
②在按键下添加相应程序
 private void button1_Click(object sender, EventArgs e)
 {
       hd.ReadPicture(hWindowControl1.HalconWindow);
  }
 private void button2_Click(object sender, EventArgs e)
{
      hd.Process();
 }
此步骤完成之后,程序可以运行。

附加步骤1:

在以上程序中,已经可以将图片显示出来,并进行处理,但由于窗口与图片的大小不一致,导致在显示窗口中不能适应程序窗口的大小,下面是解决此类问题的方法:
在读图程序中,将获取图片的大小的程序HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);放在显示图片之前,并在显示图片程序之前加入下面程序:
HOperatorSet.SetPart(hv_ExpDefaultWinHandle, 0, 0, hv_Height - 1, hv_Width - 1);然后图片就可以适应窗口大小。
此步骤也可以在halcon中更改。

附加步骤2:

如果想在程序中能够打开本地文件夹的图片进行处理,则需要改以下程序:
注意:①②是添加的类中③④是主程序中
①将public void ReadPicture(HTuple Window)的括号中加入参数,改为public void  ReadPicture(HTuple Window, string ImagePath)
②将 ReadPicture下的程序 HOperatorSet.ReadImage(out ho_Image, "C:/Users/Administrator/Desktop/猫¨.jpg");改为HOperatorSet.ReadImage(out ho_Image, ImagePath);
③主程序中定义变量string ImagePath
④将button1的程序改成如下:
     private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.Filter ="JPEG文件|*.jpg*|BMP文件|*.bmp*";
            openFileDialog1.RestoreDirectory = true;
            openFileDialog1.FilterIndex = 1;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                ImagePath = openFileDialog1.FileName;
                hd.ReadPicture(hWindowControl1.HalconWindow, ImagePath);
            }
        }
接下来可以试试运行程序。
参考地址:http://www.cnblogs.com/badguy518/p/5515054.html

halcon与C#混合编程进阶版相关推荐

  1. halcon与C#混合编程(转)

    halcon源程序: dev_open_window(0, 0, 512, 512, 'black', WindowHandle) read_image (Image, 'C:/Users/BadGu ...

  2. Halcon与C#混合编程--打开笔记本摄像头实时采集

    利用Halcon18.11联合VS2015实时打开笔记本谁摄像头. 利用Halcon自带的"hWindowControl1"实时显示 首先建立一个C#的winform界面程序,添加 ...

  3. 『Halcon与C#混合编程』010_相机实时采集并显示(或循环显示)

            1.首先在halcon通过相机助手生成以下代码 * Image Acquisition 01: Code generated by Image Acquisition 01 open_ ...

  4. 『Halcon与C#混合编程』第二章02_迈德威视工业相机SDK图像变量转换

    如果将SDK获取到的图像数据转换为halcon可以使用的变量,并在Halcon窗口中显示. 备注:本笔记仅针对SDK里最简单的方式进行组合,所以不包含相关条件,所以不可用于实际项目.学习相机的型号为迈 ...

  5. 『Halcon与C#混合编程』第二章01_迈德威视工业相机SDK入门

    打开MindVision工业相机开发手册,找到快速开发指南. 备注:本笔记仅针对SDK里最简单的方式进行组合,所以不包含其他相关条件,所以不可直接用于实际项目.学习相机的型号为迈德威视MV-SUA50 ...

  6. STM32 进阶教程 7 -  C与C++混合编程

    前言 在嵌入式开发过程中经常会用到第三个芯片/设备,这些第三方的芯片提供的DEMO程序或驱动程序有时候是C++,如果先前的系统用C语言写的就会出现点问题,往往需先将C++的驱动程序自已手动改成C语言再 ...

  7. STM32 进阶教程 6 -  汇编与C混合编程

    前言 在嵌入式开发过程中,有时候为了追求代码性能与效率不得不采用汇编语言来编写代码,但是汇编代码在阅读时表现不如C语言友好,本节给大家介绍一种新的方法,关键代码用汇编语言时行实现,然后用C语言时行接封 ...

  8. MFC与Matlab编程总结 (以《Matlab与C/C++混合编程技术(第三版)》-刘维 第五章 生成DLL为例)

    近期要完成一个任务,把人脸超分辨率的算法集成在一个系统中,嵌入人脸库及字典集等.老板的要求是有比较好的界面,目前也只能是VS那一套了,前一段时间完成的项目是用的MFC,这次也就是用MFC来完成吧.但是 ...

  9. C#与Halcon混合编程调用笔记本摄像头

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.通过Halcon导出项目 二.在C#中调用Halcon 1.新建WindForm项目 2.添加HWindowCon ...

最新文章

  1. oracle13c迁移,Oracle数据库迁移
  2. 数据库——MongoDB增删改查
  3. linux内核通用提权漏洞expliot 脏牛Dirty COW
  4. struts-resultType属性
  5. Apollo进阶课程㉚丨Apollo ROS背景介绍
  6. C语言构建一个链表以及操作链表
  7. Galaxy Fold可折叠屏手机何时能发售?三星自己也不知道
  8. 我的内核学习笔记4:sysfs学习
  9. 在SQL Server查询分析器里查询Excel文件数据
  10. php注册树模式,PHP设计模式之注册树模式
  11. 苹果Mac摄影照片降噪工具:ON1 NoNoise AI
  12. redhat7配置本地yum源
  13. 机械革命bios升级_旧笔记本光驱换SSD,升级内存,改造散热还能再战5年
  14. android 那个桌面好,手机桌面软件哪个好?最好用的手机桌面软件推荐
  15. windows 许可证即将过期,解决方案
  16. What is CRA?
  17. 无代码生产新模式探索
  18. mac软件推荐(适用m1)
  19. MySQL异常 Incorrect string value: '\xE8\xB5\xB5\xE6\xB4\x8B' for column at row的解决方案
  20. “东华春秋杯”上海大学生网络安全技能大赛决赛收官 聚焦高校人才培养

热门文章

  1. 【自学宝典】从零开始自学网络安全,按照这个路线就可以了
  2. 数据库 连接(自然连接,内连接,外连接)
  3. eclipse连接mysql数据库
  4. emmc flash和nand flash
  5. 第一次如何上线项目(一)
  6. 人脸识别几个解决方案分析与测评
  7. 人脸识别技术有哪些方案
  8. npm 的 --unsafe-perm 参数的作用
  9. 正则密码验证,包含数字、字母、特殊符号
  10. 现代循环神经网络 - 序列到序列学习