halcon源程序:

dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
read_image (Image, 'C:/Users/BadGuy/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#-halcon./net 程序;(halcon11.0)
第二步:
新建C#窗体程序
第三步:
添加halcondotnet.DLL文件到引用中,并将halconwindow添加至工具箱;
步骤如下:
引用-添加引用-(找到halcon中的halcondotnet.DLL进行添加)
第四步:
在工具箱中添加halconWindow控件
打开工具箱,在空白处右键-选择项-浏览,选择下边文件

第五步:

在Form1窗口添加一个button和halconWindow控件(工具箱中找halcon图标).
第五步:
将导出的程序添加至现有程序的类中(其中就包含using halcondotnet;);
点击项目-添加-现有项-把刚才导出来的类添加进来
第六步:
在Form1.cs中,实例化刚才导进来的类:HDevelopExport HD = new HDevelopExport();
第七步:
在button_click中调用此类的方法:HD.RunHalcon(hWindowControl1.HalconWindow);
C#程序:

namespace Test_cat
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }
  HDevelopExport HD = new HDevelopExport();
  private void button1_Click(object sender, EventArgs e)
    {
      HD.RunHalcon(hWindowControl1.HalconWindow);

    }
  }
}

注意:如果在win64 系统下,则需要将平台更改为X64或者AnyCPU
需要进一步了解的:http://www.cnblogs.com/badguy518/p/5515068.html
参考地址:http://www.cnblogs.com/hanzhaoxin/archive/2013/02/01/2888839.html

halcon与C#混合编程进阶版

这篇主要是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);
}
}

接下来可以试试运行程序。

转载于:https://www.cnblogs.com/HappyEDay/p/7879173.html

halcon与C#混合编程(转)相关推荐

  1. halcon与C#混合编程进阶版

    https://www.cnblogs.com/badguy518/p/5515068.html 这篇主要是C#和Halcon的混合编程,在此基础上对按键不同功能的划分,以及图片适应窗口和从本地打开图 ...

  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. C#与Halcon混合编程调用笔记本摄像头

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

  7. MFC与Halcon混合编程--基于相关性的模板匹配

    文章目录 前言 一.基于相关性的模板匹配 二.基于相关性的模板匹配的代码实现 1.Halcon中完成基于相关性的模板匹配 2.MFC实现与Halcon混合编程 3.实现效果 前言 正在学习Halcon ...

  8. halcon linux qt,Halcon C++混合编程学习之Qt 实现检测焊接点

    Halcon C++混合编程学习之Qt 实现检测焊接点 # include "HalconCpp.h" # include "HDevThread.h" # i ...

  9. matlab两个多项式相除,C++和MATLAB混合编程求解多项式系数(矩阵相除)

    摘要:MATLAB对于矩阵处理是非常高效的,而C++对于矩阵操作是非常麻烦的,因而可以采用C++与MATLAB混合编程求解矩阵问题. 主要思路就是,在MATLAB中编写函数脚本并使用C++编译为dll ...

最新文章

  1. python中的变量、Debug和数据类型
  2. 让机器听懂人话的自然语言处理技术究竟神奇在哪里?
  3. php表单时间转换为时间戳-175
  4. Chillingo分享三款游戏图标的设计经验
  5. python中迭代器和生成器的区别
  6. win7+eclipse用maven构建hadoop项目注意事项
  7. 带有HttpClient的自定义HTTP标头
  8. SpringBoot2.1.5(15)---配置Profile多环境支持
  9. Spring boot集成Swagger3
  10. dpkg: error: dpkg status database is locked by another process 解决方法
  11. 每周百万封业务邮件的服务器不知道为啥就down掉了?
  12. 计算机 仿真 流体力学剪切应力,基于人体血管B型主动脉夹层三维建模及血流动力学仿真研究...
  13. 新颖的自我介绍_有创意的自我介绍模板(精选6篇)
  14. Houdini函数表达式
  15. java pfx_如何在Java处理PFX格式证书
  16. 第一次搭建React项目以及错误:getaddrinfo ENOTFOUND registry.npmjs.org解决办法
  17. 2022-2028年中国农作物行业投资战略分析及发展前景研究报告
  18. elclipse tptp的安装使用
  19. Java实现 蓝桥杯VIP 算法训练 采油区域
  20. 接口自动化测试框架--接口基础

热门文章

  1. input type属性
  2. 柏拉图团队-手把手教你发代币(二)remix入门
  3. 欧拉函数公式及其证明
  4. java project、maven project项目打成可运行的jar包
  5. 2019人工智能企业100强
  6. linux接路由器没反应,路由器连接网线指示灯没反应完美解决方法
  7. Gazebo仿真学习——3.使用ROS-control设置模拟控制器驱动机器人关节
  8. 近端梯度下降法 (proximal gradient descent)
  9. 基于 Matlab的录屏软件
  10. 元器件学习——————三极管