halcon与python混编_halcon与C#混编的入门贴
这篇主要是C#和Halcon的混合编程,写给新手们看的。
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#
usingSystem;
usingHalconDotNet;
publicpartialclassHDevelopExport
{
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程序
}
//读取图片
publicvoidReadPicture(HTuple Window)
{
//读图程序
}
//处理图片
publicvoidProcess()
{
//处理程序
}
第四步:填补框架
将对应框架下得程序进行填补操作(下边程序可以代替publicpartialclassHDevelopExport下的所有程序):
//定义变量
publicHTuple 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");
}
publicvoidReadPicture(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);
}
publicvoidProcess()
{
//处理程序
HOperatorSet.GenEmptyObj(outho_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的类下对刚才添加的类进行实例化:
HDevelopExporthd = newHDevelopExport();
②在按键下添加相应程序
privatevoidbutton1_Click(objectsender, EventArgs e)
{
hd.ReadPicture(hWindowControl1.HalconWindow);
}
private void button2_Click(object sender, EventArgs e)
{
hd.Process();
}
此步骤完成之后,程序可以运行。
上面那句:hd.ReadPicture(hWindowControl1.HalconWindow);
不能写成hd.ReadPicture(hWindowControl1.handle);
否则会报下面的错误:
HALCON error #5100:Wrong(logical) window number in operator disp_obj
因为有些算子的参数是传入handle,即halcon窗口的句柄,所以有许多人容易犯这个错误,传入hWindowControl1.handle
附加步骤1:
在以上程序中,已经可以将图片显示出来,并进行处理,但由于窗口与图片的大小不一致,导致在显示窗口中不能适应程序窗口的大小,下面是解决此类问题的方法:
在读图程序中,将获取图片的大小的程序HOperatorSet.GetImageSize(ho_Image,outhv_Width,outhv_Height);放在显示图片之前,并在显示图片程序之前加入下面程序:
HOperatorSet.SetPart(hv_ExpDefaultWinHandle, 0, 0, hv_Height - 1, hv_Width - 1);然后图片就可以适应窗口大小。
此步骤也可以在halcon中更改。
附加步骤2:
如果想在程序中能够打开本地文件夹的图片进行处理,则需要改以下程序:
注意:①②是添加的类中③④是主程序中
①将publicvoidReadPicture(HTuple Window)的括号中加入参数,改为publicvoidReadPicture(HTuple Window,stringImagePath)
②将ReadPicture下的程序HOperatorSet.ReadImage(outho_Image,"C:/Users/Administrator/Desktop/猫¨.jpg");改为HOperatorSet.ReadImage(out ho_Image, ImagePath);
③主程序中定义变量stringImagePath
④将button1的程序改成如下:
privatevoidbutton1_Click(objectsender, 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);
}
}
接下来可以试试运行程序。
---------------------
作者:hackpig
halcon与python混编_halcon与C#混编的入门贴相关推荐
- python怎么安装myqr模块-python二维码操作:对QRCode和MyQR入门详解
python是所有编程语言中模块最丰富的 生活中常见的二维码功能在使用python第三方库来生成十分容易 三个大矩形是定位图案,用于标记二维码的大小.这三个定位图案有白边,通过这三个矩形就可以标识一个 ...
- 分轨混音制作|分轨混音多少钱?分轨混音母带处理服务| MZD Studios
混音太单薄没有力量?人声像贴唱没有立体感?乐器太混不够清晰?不想太业余低端? 高端混音服务就找 MZD Studios. MZD Studios 职业混音/唱片制作:主攻欧美向/电子及重型音乐制作: ...
- 不推荐二周目跑重复剧情 不推荐开混10,建议开混11,游戏文本的奖励减半并没有生效. 混10=混11+混乱词条 1.经济获取(学自大佬:小小银Salmon【B站号】) 金币获取:刚通关开混乱11,拿主
不推荐二周目跑重复剧情 不推荐开混10,建议开混11,游戏文本的奖励减半并没有生效. 混10=混11+混乱词条 1.经济获取(学自大佬:小小银Salmon[B站号]) 金币获取:刚通关开混乱11,拿主 ...
- Python 基础 之 jupyter notebook 中机器学习的简单入门书写数字识别 demo 操作学习
Python 基础 之 jupyter notebook 中机器学习的简单入门书写数字识别 demo 操作学习 目录 Python 基础 之 jupyter notebook 中机器学习的简单入门书写 ...
- Python+OpenCV人脸识别签到考勤系统(新手入门)
Python+OpenCV人脸识别签到考勤系统(新手入门) 前言 项目效果图 项目需要的环境 编译器 辅助开发QT-designer 项目配置 代码部分 核心代码 项目目录结构 后记 正式版改进 项目 ...
- [Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- 【Python】【进阶篇】十二、Python爬虫的Xpath简明教程(十分钟入门)
目录 十二.Python爬虫的Xpath简明教程(十分钟入门) 12.1 Xpath表达式 12.2 Xpath节点 12.3 节点关系 12.4 Xpath基本语法 12.4.1 基本语法使用 12 ...
- cruise软件模型,混动仿真模型,IMMD架构混联混动仿真模型,Cruise混动仿真模型
cruise软件模型,混动仿真模型,IMMD架构混联混动仿真模型,Cruise混动仿真模型,混联混动汽车动力性经济性仿真. 关于模型 1.本模型是基于IMMD架构搭载的混联混动仿真模型,关于IMMD架 ...
- 基于c#的区块链编程_C#编程之C#区块链零基础入门,学习路线图
本文主要向大家介绍了C#编程之C#区块链零基础入门,学习路线图,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助. 一.1分钟短视频<区块链100问>了解区块链基本概念 http: ...
最新文章
- 机器学习-Andrew Ng课程笔记
- python中change是什么意思_Change是什么意思?
- html中after伪类原理,css :after伪类+content使用说明和方法
- jzoj3337-[NOI2013模拟]wyl8899的TLE【字符串hash,二分】
- C语言-freopen函数输入简单使用举例
- 这是可用于下一个项目的React Native工具列表
- 百度回应“抄袭天猫精灵”;ofo 押金退完需 12 年;VS Code 1.36 发布 | 极客头条...
- csync2+sqlite实现数据的高效实时的增量备份
- 盛大“传奇”的网游启示录
- react-native-router-flux 页面跳转与传值
- 龙芯2F Debain编openssl报/usr/local/bin/ld: /usr/lib/libdl.so: error adding symbols: file in wrong format
- Android Studio 导入图片标红错误
- mysql 5.1 变量专题
- 消息中间件 - MQ的相关概念
- opencv转换图片格式
- 诗词格律[6] 词的格律
- android动画之帧动画(drawable animation)和补间动画(view animation)
- 毕业论文(二)文章中多次引用同一参考文献的不同内容该如何标注
- python实现直方图均衡化(CLAHE、HE)
- php 图片自动播放,Android实现自动播放图片功能
热门文章
- tcpdump man 手册页的详细中文翻译
- sapjco3的安装
- paper 43 :ENDNOTE下载及使用方法简介
- 【已解决】Unknown error 1146
- 在C#中使用MSMQ的方法
- LeetCode——11. 盛最多水的容器
- db2 replace函数的用法_48R软件数据的基本处理之删除重复数据(duplicated()、unique()、distinct()函数)...
- 实战——幂等性+海量数据处理
- GreenPlum-6 最简步骤安装
- 代码敲累了就来看看《PPT制作经验分享-发布版PPT》