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#混合编程进阶版相关推荐
- halcon与C#混合编程(转)
halcon源程序: dev_open_window(0, 0, 512, 512, 'black', WindowHandle) read_image (Image, 'C:/Users/BadGu ...
- Halcon与C#混合编程--打开笔记本摄像头实时采集
利用Halcon18.11联合VS2015实时打开笔记本谁摄像头. 利用Halcon自带的"hWindowControl1"实时显示 首先建立一个C#的winform界面程序,添加 ...
- 『Halcon与C#混合编程』010_相机实时采集并显示(或循环显示)
1.首先在halcon通过相机助手生成以下代码 * Image Acquisition 01: Code generated by Image Acquisition 01 open_ ...
- 『Halcon与C#混合编程』第二章02_迈德威视工业相机SDK图像变量转换
如果将SDK获取到的图像数据转换为halcon可以使用的变量,并在Halcon窗口中显示. 备注:本笔记仅针对SDK里最简单的方式进行组合,所以不包含相关条件,所以不可用于实际项目.学习相机的型号为迈 ...
- 『Halcon与C#混合编程』第二章01_迈德威视工业相机SDK入门
打开MindVision工业相机开发手册,找到快速开发指南. 备注:本笔记仅针对SDK里最简单的方式进行组合,所以不包含其他相关条件,所以不可直接用于实际项目.学习相机的型号为迈德威视MV-SUA50 ...
- STM32 进阶教程 7 - C与C++混合编程
前言 在嵌入式开发过程中经常会用到第三个芯片/设备,这些第三方的芯片提供的DEMO程序或驱动程序有时候是C++,如果先前的系统用C语言写的就会出现点问题,往往需先将C++的驱动程序自已手动改成C语言再 ...
- STM32 进阶教程 6 - 汇编与C混合编程
前言 在嵌入式开发过程中,有时候为了追求代码性能与效率不得不采用汇编语言来编写代码,但是汇编代码在阅读时表现不如C语言友好,本节给大家介绍一种新的方法,关键代码用汇编语言时行实现,然后用C语言时行接封 ...
- MFC与Matlab编程总结 (以《Matlab与C/C++混合编程技术(第三版)》-刘维 第五章 生成DLL为例)
近期要完成一个任务,把人脸超分辨率的算法集成在一个系统中,嵌入人脸库及字典集等.老板的要求是有比较好的界面,目前也只能是VS那一套了,前一段时间完成的项目是用的MFC,这次也就是用MFC来完成吧.但是 ...
- C#与Halcon混合编程调用笔记本摄像头
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.通过Halcon导出项目 二.在C#中调用Halcon 1.新建WindForm项目 2.添加HWindowCon ...
最新文章
- oracle13c迁移,Oracle数据库迁移
- 数据库——MongoDB增删改查
- linux内核通用提权漏洞expliot 脏牛Dirty COW
- struts-resultType属性
- Apollo进阶课程㉚丨Apollo ROS背景介绍
- C语言构建一个链表以及操作链表
- Galaxy Fold可折叠屏手机何时能发售?三星自己也不知道
- 我的内核学习笔记4:sysfs学习
- 在SQL Server查询分析器里查询Excel文件数据
- php注册树模式,PHP设计模式之注册树模式
- 苹果Mac摄影照片降噪工具:ON1 NoNoise AI
- redhat7配置本地yum源
- 机械革命bios升级_旧笔记本光驱换SSD,升级内存,改造散热还能再战5年
- android 那个桌面好,手机桌面软件哪个好?最好用的手机桌面软件推荐
- windows 许可证即将过期,解决方案
- What is CRA?
- 无代码生产新模式探索
- mac软件推荐(适用m1)
- MySQL异常 Incorrect string value: '\xE8\xB5\xB5\xE6\xB4\x8B' for column at row的解决方案
- “东华春秋杯”上海大学生网络安全技能大赛决赛收官 聚焦高校人才培养
热门文章
- 【自学宝典】从零开始自学网络安全,按照这个路线就可以了
- 数据库 连接(自然连接,内连接,外连接)
- eclipse连接mysql数据库
- emmc flash和nand flash
- 第一次如何上线项目(一)
- 人脸识别几个解决方案分析与测评
- 人脸识别技术有哪些方案
- npm 的 --unsafe-perm 参数的作用
- 正则密码验证,包含数字、字母、特殊符号
- 现代循环神经网络 - 序列到序列学习