10-Halcon编程方法
C#与Halcon混合编程的几种方式

C#与Halcon混合编程的⼏种⽅式Halcon的学习过程中,关于Halcon的混合编程是⽆法避免的,Halcon可以和很多种语⾔进⾏混编,这⾥仅赘述与C#语⾔进⾏混编的⼀些简单⽅式。
C#与Halcon进⾏混编的⽅式⼤体可以分为:使⽤Halcon导出功能、⾯向对象的⽅式、Halcon引擎。
当然,除了以上⽅法,还有导出库⼯程这样的⽅式可以选择,这⾥就不再阐述。
⼀、Halcon导出功能下图为使⽤Halcon编写的简单程序然后点击⽂件-》导出,或者直接点击如下按钮点击导出之后,选择语⾔为C#-Halcon/.NET,选择好导出⽂件的路径,则会得到⼀个和Halcon程序同名的.cs⽂件打开.cs⽂件,我们看到导出的代码中有⼀个action的⽅法,这个⽅法是即是我们需要重点关注的部分,我们在Halcon中写的代码都在这个⽅法中有所实现。
以下为action的代码:1private void action()2 {345// Local iconic variables67 HObject ho_Image, ho_Region, ho_ConnectedRegions;8 HObject ho_RegionDilation;910// Local control variables1112 HTuple hv_Width = null, hv_Height = null;13// Initialize local and output iconic variables14 HOperatorSet.GenEmptyObj(out ho_Image);15 HOperatorSet.GenEmptyObj(out ho_Region);16 HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);17 HOperatorSet.GenEmptyObj(out ho_RegionDilation);18 ho_Image.Dispose();19 HOperatorSet.ReadImage(out ho_Image, "printer_chip/printer_chip_01");20 HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);21if (HDevWindowStack.IsOpen())22 {23 HOperatorSet.SetPart(HDevWindowStack.GetActive(), 0, 0, hv_Height, hv_Width);24 }25 ho_Region.Dispose();26 HOperatorSet.Threshold(ho_Image, out ho_Region, 128, 255);27 ho_ConnectedRegions.Dispose();28 HOperatorSet.Connection(ho_Region, out ho_ConnectedRegions);29 ho_RegionDilation.Dispose();30 HOperatorSet.DilationCircle(ho_ConnectedRegions, out ho_RegionDilation, 3.5);31if (HDevWindowStack.IsOpen())32 {33 HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive());34 }35if (HDevWindowStack.IsOpen())36 {37 HOperatorSet.DispObj(ho_ConnectedRegions, HDevWindowStack.GetActive());38 }394041 ho_Image.Dispose();42 ho_Region.Dispose();43 ho_ConnectedRegions.Dispose();44 ho_RegionDilation.Dispose();4546 }action现在,需要我们对这个代码进⾏简单的更改,就可以在C#的Halcon窗体控件中将其显⽰出来,⾸先,新建⼀个C#窗体程序,添加halcondotnet的引⽤,并且添加其命名空间,在主窗体上添加⼀个Halcon的窗体控件和⼀个Button控件,并在Button的Click事件对应的⽅法中添加如下代码即可:代码如下:1namespace Halconprogram2 {3public partial class Form1 : Form4 {5public Form1()6 {7 InitializeComponent();8 }910private void button1_Click(object sender, EventArgs e)11 {1213// Local iconic variables1415 HObject ho_Image, ho_Region, ho_ConnectedRegions;16 HObject ho_RegionDilation;1718// Local control variables1920 HTuple hv_Width = null, hv_Height = null;21// Initialize local and output iconic variables22 HOperatorSet.GenEmptyObj(out ho_Image);23 HOperatorSet.GenEmptyObj(out ho_Region);24 HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);25 HOperatorSet.GenEmptyObj(out ho_RegionDilation);26 ho_Image.Dispose();27 HOperatorSet.ReadImage(out ho_Image, "printer_chip/printer_chip_01");28 HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);2930 HOperatorSet.SetPart(hWindowControl1.HalconID, 0, 0, hv_Height, hv_Width);3132 ho_Region.Dispose();33 HOperatorSet.Threshold(ho_Image, out ho_Region, 128, 255);34 ho_ConnectedRegions.Dispose();35 HOperatorSet.Connection(ho_Region, out ho_ConnectedRegions);36 ho_RegionDilation.Dispose();37 HOperatorSet.DilationCircle(ho_ConnectedRegions, out ho_RegionDilation, 3.5);3839 HOperatorSet.DispObj(ho_Image, hWindowControl1.HalconID);404142 HOperatorSet.DispObj(ho_ConnectedRegions, hWindowControl1.HalconID);434445 ho_Image.Dispose();46 ho_Region.Dispose();47 ho_ConnectedRegions.Dispose();48 ho_RegionDilation.Dispose();49 }50 }51 }HalconProgram⽐较前两段代码可以发现,只是对Halcon中导出的.cs⽂件进⾏了简单的窗体句柄的更改,其他地⽅没有任何改变,即可实现想要的效果。
精品课件-HALCON数字图像处理-第10章 HALCON相关实例

2、基于表面的三维匹配 【例10.6】基于表面的三维匹配实例,如图所示。
(a)原图
(d)模型场景和关 键点的可视化
HALCON数字图像
(b)选择表面模(板c区)域待搜索图像
(e)基于表面模 板的3D匹配结果
10.5 图像拼接
图像拼接(image mosaic)技术是将一组相互间重叠
字符的识别主要包含两个部分,第一个部分:将图像中的单个 字符分割出来;第二个部分:将分割出来的字符进行分类。其中 字符识别主要由字符分割、特征提取、字符分类三部分组成。
HALCON数字图像
10.1 字符分割识别
【例10.1】字符识别实例如图10-1所示。 关键点: (1) 获取单个字符的区域region(具体依据情况使用图 像增强,区域分割) (2) 选取合适的字符库,使用分类器识别字符
(a)原图 边缘映射图
HALCON数字图像
(b)3D模型 (c)匹配结果及位姿显示图
2、基于表面的三维匹配
基于表面3D模型匹配一般由下面几步组成: (1)创建表面模型所需的3D对象模型
(2)从上面的3D对象模型创建表面模型 (3)访问代表搜索数据的3D对象模型 (4)使用表面模型在搜索数据中搜索对象 (5)销毁匹配结果的句柄、所有的3D对象模型和表 面模型
(b)
二维条形码识别及实例 1.二维条码定位及解码 不同码制的二维条码具有不同的特性,彼此具有不同的 寻像图形或定位图形,因此所采用的定位方法也有所不同。 以Data Matrix条码为例,其定位图形则是由构成L形的两 条黑实线进行定位。Data Matrix二维条码如图所示。
HALCON数字图像
HALCON数字图像
10.3 去雾算法
HALCON编程及工程应用 第4章 HALCON图像采集

4.3图像采集助手
➢ 采集助手之“参数”设置:
• grab_timeout:设置采集超时终止 的时间;
• brightness:设置亮度值(-64到64) • contrast:设置对比度值(0到95) • hue:设置色调值(-2000到2000) • saturation:设置饱和度(0到100) • sharpness:设置锐度值(1到7) • gama:设置gama值(100到300) • white_balance:设置白平衡值
HALCON编程基础与工程应用
4.2图像采集算子
同步采集
同步采集是采集到图片之后才返回继续执行,简单来说就是上一张图像处 理结束以后才会再次采集图像,采集图像的速率受处理速度影响。
主要算子 grab_image:读取同步采集的图像
异步采集
异步采集是一幅图像采集完成后相机马上采集下一幅图像,即在上一副图像还在处理 的时候就开始下一张图像的采集。
主要算子 grab_image_start:异步采集开始
grab_image_async:读取异步采集的图像
HALCON编程基础与工程应用
4.3图像采集助手
使用采集助手步骤
➢ 打开采集助手:点击“菜单栏”中的“助手”,选中“打开新的Image
Acquisition”。
HALCON编程基础与工程应用
远心镜头
远心镜头(Telecentric),主 要是为纠正传统工业镜头视差 而设计,它可以在一定的物距 范围内,使得到的图像放大倍 率不会变化。
HALCON编程基础与工程应用
4.1图像采集硬件
远心镜头根据原理分为:
➢ 物方远心光路:将孔径光阑放置在
光学系统的像方焦平面上,物方主光线 平行于光轴主光线的会聚中心位于物方 无限远。其作用为:可以消除物方由于 调焦不准确带来的读数误差。
halcon常用算子原理

halcon常用算子原理Halcon是一款常用的机器视觉编程软件,拥有丰富的算子库。
算子是Halcon中用于实现图像处理和分析的基本操作单元,通过对图像进行各种算子操作,可以提取出感兴趣的特征信息,实现目标检测、图像匹配、测量等功能。
本文将介绍Halcon常用算子的原理和使用方法。
一、算子的基本概念算子是Halcon中的一个核心概念,它是一种用于对图像进行操作和处理的函数。
算子可以接受一个或多个输入参数,并根据这些参数对输入图像进行处理,生成输出结果。
Halcon提供了丰富的算子库,包括图像预处理、特征提取、形状分析、匹配等各个方面的算子,用户可以根据需要选择合适的算子进行组合使用。
二、算子的分类根据功能和用途的不同,Halcon中的算子可以分为以下几类:1. 图像预处理算子:用于对输入图像进行去噪、平滑、增强等预处理操作,以提高后续处理的效果。
2. 特征提取算子:用于从输入图像中提取出感兴趣的特征信息,如边缘、角点、直线、圆等。
3. 形状分析算子:用于对输入图像中的目标进行形状分析,如面积、周长、矩形度等。
4. 目标检测算子:用于在输入图像中检测目标的位置和姿态,如模板匹配、形状匹配、边缘匹配等。
5. 图像匹配算子:用于对输入图像进行模板匹配,找出与模板相似的目标。
6. 测量算子:用于对输入图像中的目标进行测量,如距离、角度、直径等。
三、算子的使用方法在Halcon中使用算子非常简单,只需按照以下步骤进行操作:1. 加载图像:使用read_image算子加载输入图像。
2. 预处理图像:根据需要使用不同的预处理算子对图像进行预处理,如smooth_image、reduce_noise等。
3. 提取特征:根据需要使用不同的特征提取算子对图像进行特征提取,如edges_image、threshold等。
4. 分析形状:根据需要使用不同的形状分析算子对目标进行形状分析,如area_center、orientation等。
HALCON编程及工程应用 第2章 HALCON编程基础

HALCON编程基础与工程应用
1. HDevelop预览
5.打开一个例程 HALCON提供了大量基于应用 的示例程序,下面打开一个 HALCON自带例程,简单了解 一下HALCON程序的结构。 从菜单栏>文件>浏览程序>打开 一个例程,比如打开ball.hdev, 如图2-5,2-6所示。点击工具栏“ 运行”工具图标,运行程序,结 果如图2-7所示。
图2-8 算子窗口
HALCON编程基础与工程应用Leabharlann 2. HDevelop窗口介绍
图2-9 算子查询
2.HDevelop程序窗口 程序窗口是用来显示一个HDevelop程序。它可以显示整个程
序或是某个运算符。窗口左侧是一些控制程序执行的指示符号 。HDevelop刚启动时,可以看到一个绿色箭头的程序计数器( program counter,简称 PC),一个插入符号,还可以设一个 断点(breaking point),窗口右侧显示程序代码,如图2-10所 示。
HALCON编程基础与工程应用
2.1 HDevelop应用界面介绍
HDevelop图形组件是开始视觉处理算法的一个很好的工具,其类似 于VC、VB、Delphi等编译环境,它有自己的交互式界面,可以编译和 测试视觉处理算法,可以方便查看处理结果,也可以导出算法代码。
HALCON编程基础与工程应用
HALCON编程基础与工程应用
2. HDevelop窗口介绍
在程序编辑窗口点击右键,在下拉菜单显示程 序运行调试中的一些设置,如图2-11所示。
图2-10 程序窗口
HALCON编程基础与工程应用
图2-11 程序调试设置
2. HDevelop窗口介绍
Halcon学习(10)边缘检测(一)

Halcon学习(十)边缘检测(一)边缘检测的定义:使用数学方法提取图像像元中具有亮度值(灰度)空间方向梯度大的边、线特征的过程。
边缘是指周围像素灰度有阶跃变化或屋顶等变化的那些像素的集合。
图像的边缘对应着图像灰度的不连续性。
显然图像的边缘很少是从一个灰度跳到另一个灰度这样的理想状况。
真实图像的边缘通常都具有有限的宽度呈现出陡峭的斜坡状。
边缘的锐利程度由图像灰度的梯度决定。
梯度是指灰度变化的最快的方向和数量。
常见的边缘点有三种:第一种是阶梯形边缘 (Step-edge), 即从一个灰度到比它高好多的另一个灰度。
第二种是屋顶型边缘 (Roof-edge), 它的灰度是慢慢增加到一定程度然后慢慢减小。
还有一种是线性边缘 (Line-edge), 它的灰度从一级别跳到另一个灰度级别之后然后回来。
边缘检测的方法主要有以下几种:第一种检测梯度的最大值。
由于边缘发生在图像灰度值变化比较大的地方 ,对应连续情形就是说是函数梯度较大的地方,所以研究比较好的求导算子就成为一种思路。
Roberts 算子、 Prewitt 算子和 Sobel 算子等就是比较简单而常用的例子。
还有一种比较直观的方法就是利用当前像素邻域中的一些像素值拟合一个曲面 , 然后求这个连续曲面在当前像素处梯度。
从统计角度来说 , 我们可以通过回归分析得到一个曲面 , 然后也可以做类似的处理。
第二种是检测二阶导数的零交叉点。
这是因为缘处的梯度取得最大值 ( 正的或者负的 ), 也就是灰度图像的拐点是边缘。
从分析学上我们知道 , 拐点处函数的二阶导数是 0 。
第三种,统计型方法。
比如说利用假设检验来检测边缘中利用对二阶零交叉点的统计分析得到了图像中各个像素是边缘的概率,并进而得到边缘检测的方案。
1.sobel_amp(Image : EdgeAmplitude : FilterType, Size : )根据图像的一次导数计算图像的边缘程序如下:read_image (Image, 'fabrik')sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)threshold (EdgeAmplitude, Region, 10, 255)skeleton (Region, Skeleton)dev_display (Image)dev_set_color ('white')dev_display (Skeleton)ImageEdgeAmplitudeSkeletonsobel_amp( Image : EdgeAmplitude : FilterType, Size : )根据图像的一次导数计算图像的边缘close_edges( Edges, EdgeImage : RegionResult :MinAmplitude : )close_edges_length( Edges, Gradient : ClosedEdges : MinAmplitude, MaxGapLength : ) 使用边缘高度图像关闭边缘间隙。
halcon引擎编程流程

halcon引擎编程流程Halcon引擎编程流程Halcon引擎是一种用于机器视觉应用开发的强大工具,它可以帮助开发者快速构建高效准确的视觉系统。
本文将介绍Halcon引擎的编程流程,帮助读者了解如何使用Halcon引擎进行开发。
一、引擎初始化在使用Halcon引擎之前,首先需要进行引擎的初始化。
这一步骤包括加载引擎库文件、创建引擎实例等操作。
通过调用相应的函数,我们可以完成引擎的初始化工作。
二、图像采集和预处理在进行图像处理之前,我们需要先采集图像并进行预处理。
Halcon 引擎提供了一系列的函数来实现图像采集和预处理的功能。
我们可以使用相机接口函数来获取实时图像数据,并使用图像处理函数对图像进行一些基本的预处理操作,例如灰度化、平滑、二值化等。
三、特征提取和匹配在进行目标检测和识别时,我们需要对图像进行特征提取和匹配。
Halcon引擎提供了一些常用的特征提取和匹配算法,例如边缘检测、形状匹配、模板匹配等。
通过调用这些函数,我们可以提取图像中的关键特征,并与预先设定的模板或样本进行匹配,从而实现目标的检测和识别。
四、图像分割和分析除了目标检测和识别外,Halcon引擎还可以进行图像分割和分析。
图像分割是将图像分成若干个区域的过程,而图像分析则是对这些区域进行特征提取和分析。
Halcon引擎提供了一些常用的图像分割和分析算法,例如区域生长、边缘跟踪、形状分析等。
通过调用这些函数,我们可以将图像分割成具有不同特征的区域,并对这些区域进行进一步的分析和处理。
五、结果显示和输出在完成图像处理和分析之后,我们需要将结果显示和输出。
Halcon 引擎提供了一些函数来实现结果的显示和输出,例如图像显示、文本输出、图像保存等。
通过调用这些函数,我们可以将处理结果以图像或文本的形式输出,以便后续的应用。
六、引擎释放在完成所有的图像处理和分析之后,我们需要释放Halcon引擎的资源。
这一步骤包括释放引擎实例、关闭相机等操作。
halcon中求整数的绝对值

halcon中求整数的绝对值Halcon中求整数的绝对值绝对值是一个数在数轴上的距离,它与数的正负无关。
在Halcon中,我们可以使用abs函数来求整数的绝对值。
abs函数是Halcon中一个非常常用的函数,它可以接受一个参数,并返回该参数的绝对值。
该参数可以是整数、浮点数或图像。
使用abs函数求整数的绝对值非常简单,只需要将整数作为参数传入即可。
下面是一个示例:```Halconinteger_value := -10abs_value := abs(integer_value)```在上面的示例中,我们定义了一个整数变量integer_value,并将其赋值为-10。
然后使用abs函数将integer_value的绝对值赋值给abs_value。
最后,可以通过打印abs_value来查看整数的绝对值。
除了整数之外,abs函数还可以用于求解浮点数的绝对值。
下面是一个示例:```Halconfloat_value := -3.14abs_value := abs(float_value)```在上面的示例中,我们定义了一个浮点数变量float_value,并将其赋值为-3.14。
然后使用abs函数将float_value的绝对值赋值给abs_value。
同样地,通过打印abs_value可以查看浮点数的绝对值。
除了数值类型之外,abs函数还可以用于图像类型。
在这种情况下,abs函数将返回图像中每个像素点的绝对值。
下面是一个示例:```Halconread_image(image, 'example.jpg')abs_image := abs(image)```在上面的示例中,我们使用read_image函数读取了一张名为example.jpg的图像,并将其赋值给image变量。
然后使用abs函数将image中每个像素点的绝对值赋值给abs_image。
通过显示abs_image可以查看图像中每个像素点的绝对值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
o
m
工程设置
w
w w
5. 添加图像处理代码; 6. 编译。
.i
h
a
lc
4. 在代码文件头添加 “ Imports HalconDotNet”代码;
o n .c
3. 给对话框添加Halcon控 件,并且添加上规划的 其他功能控件。如右图;
o
m
工程设置
w w w .i h a
o
m
函数调用和类调用
头文件路径
$(HALCONROOT)\include, $(HALCONROOT)\include\ halconcpp halconcpp.lib
名空间 静态库文件 静态库文件路径
using namespace HalconCpp; using namespace Halcon;
o n .c
6. 在对话框上添加picture控件,用来显示图片; 7. 然后在对话框的OnInitDialog()函数中添加如下代码:
o
m
添加图像显示窗口
你可以通过三种方式 “use Namespace”:
HalconCpp::HObject original_image, smoothed_image; HalconCpp::ReadImage(&original_image, "monkey");
w
w w
.i
h
大恒图像 深圳办事处a——M来自C和.NET编程示例lc
HALCON 11 编程方法
o n .c
o
m
w w w .i h a lc
MFC编程方法
o n .c
o
m
w
w w
◆ .NET Framework版本选择
.i
h
.net编程方法
a
◆ MFC工程设置 ◆ 添加图像像窗口 ◆ HalconCpp名空间 ◆ 函数调用和类调用 ◆ 老版本代码Halcon 11兼容
o
m
老版本代码Halcon 11兼容
新 HALCON/C++
旧 HALCON/C++
依旧可用
w
w w
HALCON 11
下一版
.i
h
a
lc
再下一版
o n .c
再下一版
o
m
对旧代码的后续支持
w w w .i h a lc
.NET编程方法
o n .c
o
m
Visual Studio .NET 2002 Visual Studio .NET 2003 Visual Studio .NET 2005 Visual Studio .NET 2008 Visual Studio .NET 2010
lc
w
w w
.i
h
a
$(HALCONROOT)\lib\$(H ALCONARCH)
o n .c
版本
Halcon 11代码
Halcon 10及以前版本代码 $(HALCONROOT)\include, $(HALCONROOT)\include\ cpp halconcpp10.lib $(HALCONROOT)\lib\$(H ALCONARCH)
添加控件
w
w w
.i
h
a
lc
o n .c
4. 在对话框上添加上halcon控件。
o
m
6. 添加窗口控制 代码
w
w w
.i
h
a
lc
o n .c
5. 添加代码
o
m
w w w .i h a lc
编译创建
o n .c
o
m
w w w .i h a lc
谢 谢
o n .c
o
m
a
lc
o n .c
Visual Studio与 .NET Framework 版本对应关系
o
m
.NET Framework版本选择
w
w w
.i
h
a
lc
o n .c
1. 以对话框为例,新建一个对话框; 2. 打开 Toolbox右键菜单,Choose Items,选择路径,添 加Halcon控件,如图;
lc
HObject original_image, smoothed_image; ReadImage(&original_image, "monkey"); MeanImage(original_image, &smoothed_image, 11, 11);
o n .c
HALCON/C++ 接口提供了两种途径来调用HALCON算法, 一种是函数调用,一种是类的调用。
◆ 在函数开始位置添加
w
w w
#include "HalconCpp.h" using namespace HalconCpp;
.i
◆ 全局添加
h
int main(int argc, char *argv[]){ using namespace HalconCpp; HObject original_image, smoothed_image; ReadImage(&original_image, "monkey"); }
lc
o n .c
o
MFC编程方法
m
内容概要
w
w w
$(HALCONROOT)\include,$(HA LCONROOT)\include\halconcp p,如右图;
.i
h
1. 以对话框为例,新建一 个 MFC工程,并添加功 能控件; 2. 打开工程设置菜单 C/C++菜单 Gategory 选择 processer,在 Additional include directories编辑框中加上
a
lc
o n .c
◆ 在每个函数和变量前,加前缀
o
m
HalconCpp名空间
◆ 函数调用示例
◆ 类的调用示例
w
w w
.i
h
a
HImage original_image (“monkey”); // “monkey”图片路径 HImage smoothed_image = original_image.MeanImage(11, 11);
VB编程方法
lc
o n .c
o
m
w
w w
.i
h
a
lc
o n .c
3. 新建一个空的VB对话框工程,如下图; 4. 添加功能按钮控件;
o
m
创建对话框
.i
h
a
lc
o n .c
3. 向工具栏添加控件。工程菜单===>部件===>控件,勾 选上 halcon/com library,确定。
o
w
w w
m
Halcon控件
lc
VC6.0 添加 Lib文件
5. 添加名空间;
w
w w
4. 在头文件中添加
o n .c
o
m
MFC工程设置
w
w w
.i
h
8. 添加图像处理函数, 编译程序,运行。
a
lc
CRect rtWindow; HWND hImgWnd = GetDlgItem(ID_STC_IMAGE)->m_hWnd; // 图像控件m_hWnd GetDlgItem(ID_STC_IMAGE)->GetClientRect(&rtWindow);// 控件大小 OpenWindow(rtWindow.left, rtWindow.top, rtWindow.Width(), rtWindow.Height(), (Hlong)hImgWnd, “visible”, “”, &m_htWindow); // 打开窗口
.NET Framework 1.0 .NET Framework 1.1 .NET Framework 2.0 .NET Framework 3.5 .NET Framework 4.0
w
w w
.i
h
Halcon 11提供了两个版本的库文件,如下图,在 %HALCONROOT%\bin目录下,高级编程环境兼容低级版本。
a
lc
VC 6.0 添加 Include文件
o n .c
o
m
MFC工程设置
.i
$(HALCONROOT)/lib/$(HAL CONARCH) “#include HalconCpp.h”
h
a
3. 工程设置菜单 Link 菜单 Getegory 选 择Input,在 Object/library modules 中加入 halconcpp.lib, 在Additional library path中加入