首页 技术 正文
技术 2022年11月10日
0 收藏 380 点赞 2,913 浏览 4517 个字

这篇主要是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来自为知笔记(Wiz)

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,030
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,520
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,368
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,148
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,781
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,859