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可以查看图像中每个像素点的绝对值。
halcon 区域的各种技巧
Halcon 区域的各种技巧Halcon 是一款强大的机器视觉软件库,广泛应用于工业自动化领域。
区域是Halcon 中的重要概念,用于表示图像中感兴趣的区域。
本文将介绍 Halcon 中区域的各种技巧,包括创建、操作和分析区域等方面。
1. 创建区域1.1 点集在 Halcon 中,可以通过点集来创建区域。
点集是由一系列二维坐标点组成的数据结构。
points := [[100, 200], [150, 250], [200, 300]]region := gen_region_points(points)上述代码创建了一个包含三个点的区域。
1.2 线段除了点集,还可以使用线段来创建区域。
线段由起始点和结束点组成。
start_x := 100start_y := 200end_x := 300end_y := 400region := gen_region_line(start_x, start_y, end_x, end_y)上述代码创建了一个起始点为 (100, 200),结束点为 (300, 400) 的线段区域。
1.3 矩形矩形是一种常见的区域类型,在 Halcon 中可以通过指定左上角和右下角坐标来创建矩形。
top := 100left := 200bottom := 300right := 400region := gen_region_rectangle1(top, left, bottom, right)上述代码创建了一个左上角坐标为 (100, 200),右下角坐标为 (300, 400) 的矩形区域。
1.4 圆形圆形也是一种常见的区域类型,在 Halcon 中可以通过指定圆心坐标和半径来创建圆形。
center_x := 200center_y := 300radius := 100region := gen_region_circle(center_x, center_y, radius)上述代码创建了一个圆心坐标为 (200, 300),半径为 100 的圆形区域。
Halcon例程学习
**********intensity.hdev例程*********** Calculate the mean and deviation of gray values of regions of an image **读入图像read_image (Image, 'mreut')*关闭(当前)活动的图形窗口dev_close_window ()*获取图像的宽度和高度get_image_size (Image, Width, Height)*打开一个新的图形窗口dev_open_window (0, 0, Width, Height, 'black', WindowID)*在当前窗口显示Image对象dev_display (Image)*设置区域(Region)填充模式dev_set_draw ('margin')* Create two regions* gen_rectangle1( : Rectangle : Row1, Column1, Row2, Column2 : ) gen_rectangle1 (Rectangle1, 350, 100, 450, 200)gen_rectangle1 (Rectangle2, 100, 200, 200, 300)*计算灰度的均值和标准差*intensity(Regions, Image : : : Mean, Deviation)intensity (Rectangle1, Image, Mean1, Deviation1)intensity (Rectangle2, Image, Mean2, Deviation2)**********auto_threshold.hdev例程***********关闭(当前)活动的窗口dev_close_window ()read_image (Aegypt1, 'egypt1')get_image_size (Aegypt1, Width, Height)*打开一个新的图形窗口dev_open_window (0, 0, Width, Height, 'black', WindowID)set_display_font (WindowID, 14, 'mono', 'true', 'false')dev_set_colored (6)dev_clear_window ()*直方图自动阈值分割(自适应阈值),根据灰度直方图中两波峰中的波谷中取出阈值*自动阈值输入必须是单通道图像,会有多阈值分割,sigma对于灰度直方图进行高斯平滑,决定平滑程度(分割细致程度)*sigma越大,灰度直方图基本会被平滑只剩下一个波峰,分割是根据平滑后直方图的波谷进行的*sigma越小,分割越细致*Default value: 2.0*Suggested values: 0.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0Sigma := 4auto_threshold (Aegypt1, Regions, Sigma)*计算出图像区域的绝对灰度和相对灰度直方图*gray_histo(Regions, Image : : : AbsoluteHisto, RelativeHisto)gray_histo (Aegypt1, Aegypt1, AbsoluteHisto, RelativeHisto)*下面算子可以求出出现频率最多的灰度值*PeakGray := sort_index(AbsoluteHisto)[255]*简单显示操作disp_continue_message (WindowID, 'black', 'true')stop ()dev_clear_window ()*将离散的点连接成一个函数并对其进行操作create_funct_1d_array (AbsoluteHisto, Function)*平滑滤波,对一维数组进行平滑处理smooth_funct_1d_gauss (Function, Sigma, SmoothedFunction)dev_set_color ('red')*将数据分别对应赋予一个横坐标funct_1d_to_pairs (SmoothedFunction, XValues, YValues)*将一个直方图转化为一个区域*gen_region_histo( : Region : Histogram, Row, Column, Scale : )gen_region_histo (Histo1, YValues, 255, 255, 1)dev_display (Aegypt1)dev_set_color ('white')gen_region_histo (Histo2, RelativeHisto, 255, 255, 1)**********获取图像参数***********读入图像read_image (Image, 'fabrik')*获取图像生成时间get_image_time(Image,MSecond, Second, Minute, Hour, Day, YDay, Month, Year)*关闭当前活动的图形窗口dev_close_window()*获取图像的宽度和高度get_image_size(Image,Width,Height)*按比例1:1显示图像dev_open_window(0,0,Width,Height,'black', WindowHandle)dev_display(Image)*获取图像的类型,包括:*‘i nt1', 'int2', 'uint2', 'int4', 'int8', 'byte', 'real'*'direction', 'cyclic', 'complex', 'vector_field'get_image_type(Image,Type)*计算Image图像中坐标为(Row,Column)的点的灰度值Grayvalget_grayval(Image,100,100,Graycal)*计算Image图像的数据指针Pointer,图像类型Type,图像宽度Width和高度Height。
HALCON编程及工程应用 第11章 HALCON标定方法
以30*30 规定的标定板的规格为例: 黑色圆点行数:7 黑色圆点列数:7 外边框长度:30mm*30mm 内边框长度:28.125mm*28.125mm ,即黑色边框线
HALCON编程基础与工程应用
11.4 HALCON标定助手
1、标定注意事项 HALCON中的标定助手为图像处理提供了一种很简便的标定方式,不仅简 化了标定步骤,也省去了繁琐的编程过程,我们只需要采集到符合标定 标准的标定板图像,了解设备的参数信息,比如相机类型、标定板厚度 等。 (1)标定板材质选用玻璃或者陶瓷材质为最好; (2)光源尽量在标定板前方,在与相机相反的方向; (3)标定板采集图像尽量在12幅以上,数量越多,所得的参数就越精确; (4)为了保证参数的精确性,要保证标定板的四角全部在视野范围内。 主要是因为一般标定板的四角畸变量比较大,需要通过四角的畸变程度 获得准确的畸变系数; (5)要保证标定板的标志点灰度值与其背景灰度值的差值在100以上, 否则HALOCN会提示有品质问题。
HALCON编程基础与工程应用
从世界坐标系到相机坐标系
空间点Pw(Xw,Yw,Zw)转换到点 P(Xc,Yc,Zc):
P RPω
式中,R是旋转矩阵,T是平移向量。 每一个世界坐标的对象都可以通过旋转和平移变换到相机坐标
系上(旋转过程如下图)。将目标点旋转θ角度,等价于将坐标系 按相反的方向旋转θ角度。如下图所示,是二维坐标的旋转变换, 对于三维坐标而言,旋转中绕某一个轴旋转,原理与二维坐标旋转 相同。如果世界坐标分别绕 X、Y 和 Z轴旋转α、β、γ,那么旋
Halcond 10.0导出至C#详细教程
Halcon 10.0导出至C#代码------VS2010①编写halcon代码。
如图。
显示一张图片dev_close_window ()read_image (Image,'D:/halconExample/ITF25_1.jpg')dev_open_window (0, 0, 120, 300, 'black', WindowHandle)dev_display(Image)②导出代码为C#,如图,配置最好如图③打开VS2010,新建—项目---Visual C#--windows窗体应用程序,基于.net framework4④打开,可看到设计界面,在左边有工具箱,拉到最后,在常规选项卡空白处右键----选择项----在.NET Framework处点浏览----(Halcon安装目录)\Bin\dotnet35\halcondotnet.dll 确定,确定。
可看到如下:⑤将HWindowControl拖至窗口,顺便拉一个Button过去⑥打开⑦将halcon导出的unnamed.cs打开,拷贝里面的整个HDevelopExport类。
其他头文件啊using啊什么的不要拷贝,最下方那一坨也不要拷贝。
拷贝至program.cs里面。
并且要在最上方加上 using HalconDotNet; 不加你试试看哈?(class Program是原本就有的。
拷贝到它的下方)⑧修改相应过程// Main procedureprivate void action(string filename) //此处由private void action()改成{// Local iconic variablesHObject ho_Image;// Local control variables// Initialize local and output iconic variablesHOperatorSet.GenEmptyObj(out ho_Image);//dev_close_window(...);ho_Image.Dispose();// HOperatorSet.ReadImage(out ho_Image, "D:/halconExample/ITF25_1.jpg");HOperatorSet.ReadImage(out ho_Image, filename); //此处由/HOperatorSet.ReadImage(out ho_Image, "D:/halconExample/ITF25_1.jpg"); 改成//dev_open_window(...);HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);ho_Image.Dispose();}public void RunHalcon(HTuple Window,string filename) /此处由public void RunHalcon(HTuple Window) 改成{hv_ExpDefaultWinHandle = Window;action(filename); /此处由action();改成}⑪回到设计界面,双击我们的按钮button1,进入click触发函数然后对照一下,照着加吧。
halcon 创建区域的方法
halcon 创建区域的方法【原创实用版4篇】篇1 目录1.Halcon 简介2.创建区域的目的3.创建区域的方法4.注意事项篇1正文1.Halcon 简介Halcon 是一种用于工业自动化领域的编程语言,它是由德国的Siemens 公司开发的。
Halcon 在工业自动化控制领域有着广泛的应用,其强大的功能和灵活性使得工程师可以轻松地实现复杂的控制逻辑。
2.创建区域的目的在 Halcon 中,创建区域是一种组织和优化程序的方法。
通过创建区域,可以将程序划分为不同的部分,使得程序的结构更加清晰,便于维护和调试。
此外,创建区域还可以提高程序的执行效率,因为 Halcon 会根据区域的定义进行优化。
3.创建区域的方法在 Halcon 中,创建区域的方法非常简单。
以下是具体的步骤:(1)打开 Halcon 编辑器,新建或打开一个已有的程序。
(2)在程序中选择要创建区域的位置,通常是在程序的开始部分。
(3)点击工具栏上的“创建区域”按钮,或者使用快捷键“Ctrl+Shift+N”。
(4)在弹出的对话框中,输入区域的名称,并选择区域的类型。
区域的类型包括输入区、输出区、运算区、存储区等,根据需要进行选择。
(5)点击“确定”按钮,即可创建一个新的区域。
4.注意事项在创建区域时,需要注意以下几点:(1)区域的名称应该简洁明了,能够体现区域的功能和用途。
(2)区域的类型应该根据实际需要进行选择,不同的类型具有不同的功能和特点。
(3)在创建区域后,需要将相应的程序代码移动到新创建的区域中,以实现程序的优化。
总之,在 Halcon 中创建区域是一种有效的编程方法,可以帮助工程师更好地组织和管理程序,提高程序的执行效率。
篇2 目录1.Halcon 简介2.创建区域的目的3.创建区域的方法4.注意事项篇2正文1.Halcon 简介Halcon 是德国 Halder 公司开发的一款工业自动化软件,主要用于机器视觉和工业自动化控制领域。
halcon机器视觉算法原理
halcon机器视觉算法原理Halcon机器视觉算法原理Halcon是一种基于图像处理的机器视觉软件,它广泛应用于工业自动化领域。
Halcon机器视觉算法的原理主要包括图像预处理、特征提取和模式匹配三个步骤。
1. 图像预处理图像预处理是Halcon算法的第一步,目的是对输入的图像进行去噪、增强和边缘检测等操作,以提高后续步骤的准确性和稳定性。
常见的图像预处理方法包括均值滤波、中值滤波、高斯滤波和直方图均衡化等。
2. 特征提取特征提取是Halcon算法的核心步骤,它通过从图像中提取出具有代表性的特征来描述目标物体的形状、纹理和颜色等特征。
常见的特征提取方法包括边缘检测、角点检测、轮廓提取和颜色直方图等。
边缘检测是一种常用的特征提取方法,它通过识别图像中的边缘信息来描述目标物体的形状。
常见的边缘检测算法包括Sobel算子、Prewitt算子和Canny算子等。
角点检测是一种特殊的特征提取方法,它通过识别图像中的角点来描述目标物体的形状和纹理。
常见的角点检测算法包括Harris角点检测算法和Shi-Tomasi角点检测算法等。
轮廓提取是一种常用的特征提取方法,它通过识别图像中的轮廓信息来描述目标物体的形状。
常见的轮廓提取算法包括边缘跟踪算法和形态学轮廓提取算法等。
颜色直方图是一种常用的特征提取方法,它通过统计图像中各个像素的颜色分布来描述目标物体的颜色特征。
常见的颜色直方图算法包括灰度直方图、RGB直方图和HSV直方图等。
3. 模式匹配模式匹配是Halcon算法的最后一步,它通过将提取得到的特征与预先定义的模板进行匹配,从而实现对目标物体的识别和定位。
常见的模式匹配方法包括模板匹配、形状匹配和颜色匹配等。
模板匹配是一种常用的模式匹配方法,它通过将目标物体的特征与模板进行比较,找到最佳匹配的位置。
常见的模板匹配算法包括灰度相关匹配、形态学匹配和尺度不变特征变换(SIFT)等。
形状匹配是一种特殊的模式匹配方法,它通过将目标物体的形状与模板进行比较,找到最佳匹配的位置。
halcon机器视觉与算法原理编程实践
halcon机器视觉与算法原理编程实践Halcon机器视觉与算法原理编程实践机器视觉技术作为一种基于图像和视频信号的智能感知技术,在工业自动化、无人驾驶、医疗影像等领域有着广泛的应用。
而Halcon 作为一种成熟、强大的机器视觉开发平台,其机器视觉与算法原理编程实践备受关注。
Halcon是由德国MVTec Software GmbH开发的一款适用于机器视觉应用的软件库。
它提供了丰富的图像处理和分析算法,包括特征提取、模式匹配、边缘检测等功能,可以帮助开发者实现各种复杂的视觉任务。
Halcon的编程接口友好,支持多种编程语言,如C++、C#等,使得开发者可以根据具体需求选择适合的编程语言进行开发。
在Halcon机器视觉与算法原理编程实践中,首先要了解图像处理的基本概念。
图像处理是指对图像进行数字化处理,通过对图像的处理和分析,提取出有用的信息,实现对图像的理解和识别。
在机器视觉中,图像处理是一个关键的环节,也是实现各种视觉任务的基础。
接下来,需要了解Halcon中的算法原理。
Halcon提供了丰富的算法库,其中包括了各种经典的图像处理和分析算法。
例如,边缘检测算法可以帮助我们提取图像中的边缘信息,用于物体的定位和识别;特征提取算法可以帮助我们提取图像中的特征点,用于图像匹配和目标跟踪等。
在实际的编程实践中,我们可以通过Halcon提供的函数和接口来调用相应的算法。
例如,通过调用Halcon的边缘检测函数,可以实现对图像中的边缘信息进行提取;通过调用Halcon的特征提取函数,可以实现对图像中的特征点进行提取。
在调用这些函数时,我们需要传入相应的参数,如图像路径、算法参数等,以便Halcon 能够正确地执行相应的算法。
除了基本的图像处理和分析算法外,Halcon还提供了一些高级的功能,如图像匹配、目标跟踪等。
这些功能可以帮助我们实现更加复杂的视觉任务。
例如,通过Halcon的图像匹配算法,我们可以实现对图像中的目标进行匹配和定位;通过Halcon的目标跟踪算法,我们可以实现对运动目标的实时跟踪。
HALCON编程
中文手冊快速指引For Evaluation Only.Copyright (c) by Foxit Software Company, 2004 - 2007Edited by Foxit PDF Editor目錄Introducing HALCON (4)1.1 Key Features (4)1.2誰應該用HALCON? (5)1.3 您需要的知識 (5)1.4開始使用HALCON (6)1.5如何取得更多資訊 (6)如何用HALCON來開發程式 (8)2.1 HALCON的核心: 組織架構以及資料結構 (9)2.2 HDevelop快速入門 (12)2.3 在程式語言中使用HALCON (13)2.4 延伸 HALCON功能 (15)2.5 HALCON的使用極限 (15)各種行業的應用 (16)3.1 電子零件和設備 (16)3.2 食物 (19)3.3 醫療和生命科學 (20)3.4鐵、鋼和金屬 (23)3.5機械 (26)3.6 航空攝影測量和遙感 (32)3.7 印刷 (38)3.8 橡膠、合成纖維材料、金屬薄片 (39)3.9 半導體 (41)第一章Introducing HALCONHALCON 是當今machine vision技術的代表,它總是以最新科技為基礎,提供了現今市場中最強大的vision library。
不論您的工作為何,HALCON都能快速而精確的解決問題。
Vision Development Environment一個專業的影像處理工具不能只具有影像處理功能。
影像處理只是整個工作的其中一環,還要有其他軟體功能,像是程序控制,資料處理,硬體方面還有照明和取像設備,以及其他硬體機構等等。
一個影像處理系統除了要易於使用,還必須能夠以富有彈性的方式將上述功能加入開發的流程之中。
為此,HALOCN考量到各種重要的層面:透過一個互動式的工具HDevelop快速達成軟體開發的工作,藉由程式碼的輸出,可以輕易的和標準的軟體開發工具,例如Micrisoft Visual C++ 整合。
Halcon编程语法
输入控制参数可以是表达式,但图形参数、输出参数均应为变量;String类型变量由单引号’ 括起来;此外还有一些特殊字符;Boolean型变量包括true ( = 1 )、false ( = 0 ) ;不为零的整数将被认为true;但绝大多数的Halcon函数接受字符串型的表达:’true’ ‘false’,而非逻辑型表达;函数返回常量用于标识错误:Ø H_MSG_TRUE no error 2Ø H_MSG_FALSE logical false 3Ø H_MSG_FAIL operator did not succeed 5可以放在try…catch…endtry块中,也可以用dev_error_var() 与dev_set_check() 来捕获;控制语句结构:(与一般语言略有不同,它们也有输入输出变量)Ø if ... endif / if ... else ... endif / if ... elseif ... else ... endifØ for ... endforØ while ... endwhileØ repeat ... until此外,也有关键字break、continue、return、exit、stop 用来控制语句的执行;赋值语句在Halcon中也被当作函数来使用:标准赋值Ø assign(Expression, ResultVariable) //编辑形式,永远都是输入在前,输出在后Ø ResultVariable := Expression //代码形式元组插入赋值Ø insert(Tuple, NewValue, Index, Tuple) //编辑形式Ø Tuple[Index] := NewValue //代码形式控制变量元组操作Ø [t,t] concatenation of tuplesØ |t| number of elementsØ t selection of an elementØ t[i:j] selection of a part of a tupleØ subset(t1,t2) selection from t1 by indices in t2图形元组操作对应函数Ø [] gen_empty_obj ()Ø |t| count_obj (p, num)Ø [t1,t2] concat_obj (p1, p2, q)Ø t select_obj (p, q, i+1)Ø t[i:j] copy_obj (p, q, i+1, j-i+1)Ø subset(t1,t2) select_obj (p, q, t2+1)元组的数学运算,如:A * B,令m = |A|, n = |B|;若m、n不相等,且都大于1,则错误;否则返回三种情况:Ø m=n=1,返回一个值;Ø m=n>1,返回一个包含m个数的元组,值为两元组各对于值的操作结果;Ø m>1,n=1,返回一个包含m个数的元组,值为第二个数与第一元组各值的操作结果;Halcon 的数学运算算术运算Ø a / a divisionØ a % a rest of the integer divisionØ a * a multiplicationØ v + v addition and concatenation of stringsØ a - a subtractionØ -a negation位运算Ø lsh(i,i) left shiftØ rsh(i,i) right shiftØ i band i bit-wise andØ i bor i bit-wise orØ i bxor i bit-wise xorØ bnot i bit-wise complement字符串操作Ø v$s conversion to string //字符串的格式化,有很丰富的参数Ø v + v concatenation of strings and additionØ strchr(s,s) search character in stringØ strstr(s,s) search substringØ strrchr(s,s) search character in string (reverse)Ø strrstr(s,s) search substring (reverse)Ø strlen(s) length of stringØ s{i} selection of one characterØ s{i:i} selection of substringØ split(s,s) splitting to substrings比较操作符Ø t < t less thanØ t > t greater thanØ t <= t less or equalØ t >= t greater or equalØ t = t equalØ t # t not equal逻辑操作符Ø not l negationØ l and l logical ’and’Ø l or l logical ’or’Ø l xor l logical ’xor’数学函数Ø sin(a) sine of aØ cos(a) cosine of aØ tan(a) tangent of aØ asin(a) arc sine of a in the interval [-p/2, p/ 2], a Î [-1, 1] Ø acos(a) arc cosine a in the interval [-p/2, p/2], a Î [-1, 1] Ø atan(a) arc tangent a in the interval [-p/2, p/2], a Î [-1, 1] Ø atan2(a,b) arc tangent a/b in the interval [-p, p]Ø sinh(a) hyperbolic sine of aØ cosh(a) hyperbolic cosine of aØ tanh(a) hyperbolic tangent of aØ exp(a) exponential functionØ log(a) natural logarithm, a> 0Ø log10(a) decade logarithm, a> 0Ø pow(a1,a2) powerØ ldexp(a1,a2) a1 pow(2,a2)其他操作(统计、随机数、符号函数等)Ø min(t) minimum value of the tupleØ max(t) maximum value of the tupleØ min2(t1,t2) element-wise minimum of two tuplesØ max2(t1,t2) element-wise maximum of two tuplesØ find(t1,t2) indices of all occurrences of t1 within t2Ø rand(i) create random values from 0..1 (number specified by i)Ø sgn(a) element-wise sign of a tupleØ sum(t) sum of all elements or string concatenationØ cumul(t) cumulative histogram of a tupleØ mean(a) mean valueØ deviation(a) standard deviationØ sqrt(a) square root of aØ deg(a) convert radians to degreesØ rad(a) convert degrees to radiansØ real(a) convert integer to realØ int(a) convert a real to integerØ round(a) convert real to integer 四舍五入Ø number(v) convert string to a numberØ is_number(v) test if value is a numberØ abs(a) absolute value of a (integer or real)Ø fabs(a) absolute value of a (always real)Ø ceil(a) smallest integer value not smaller than aØ floor(a) largest integer value not greater than aØ fmod(a1,a2) fractional part of a1/a2, with the same sign as a1Ø sort(t) sorting in increasing orderØ uniq(t) eliminate duplicates of neighboring values (typically used in combination with sort)Ø sort_index(t) return index instead of valuesØ median(t) Median value of a tuple (numbers)Ø select_rank(t,v) Select the element (number) with the given rankØ inverse(t) reverse the order of the valuesØ subset(t1,t2) selection from t1 by indices in t2Ø remove(t1,t2) Remove of values with the given indicesØ environment(s) value of an environment variableØ ord(a) ASCII number of a characterØ chr(a) convert an ASCII number to a characterØ ords(s) ASCII number of a tuple of stringsØ chrt(i) convert a tuple of integers into a string。
- 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中加入