Halcon安装:
halcon介绍:
德国MVtec公司开发的一套完善的标准的机器视觉算法包。底层功能算法多,运算性能快。halcon不能提供相应的界面编程需求,需要和vs一起才能构成一套完整软件。
软件界面
halcon数据类型
Halcon的数据类型主要分为两大类:图形参数(Iconic Parameters)和控制参数(Control Parameters)。
图形参数(Iconic Parameters)
图形参数用于表示图像和图像中的对象
Image(图像):
图像是Halcon中最基本的数据结构,用于表示二维图像。它包含了图像的像素值、尺寸、颜色模式等信息。
图像可以是灰度图像(单通道图像)或彩色图像(多通道图像),颜色通道可以是RGB、HSV等。
图像可以通过读取文件、采集设备或者算法生成。
Region(区域):
区域用于表示图像中的感兴趣区域。它可以是一个矩形、圆形、多边形等形状,也可以是由像素组成的任意形状。
区域可以用于图像分割、目标检测、形状匹配等应用。
区域可以通过二值化、形状操作或者算法生成。
XLD(Extended Line Descriptions,扩展线描述符):
XLD是一种特殊的数据结构,用于表示图像中的线段、圆弧、椭圆等几何形状。
XLD比传统的像素级表示更精确,可以达到亚像素级别,因此在边缘检测、形状拟合、曲线跟踪等任务中有重要应用。
XLD可以通过边缘检测、边缘连接或者算法生成。
控制参数(Control Parameters)
控制参数用于控制图像处理的过程和结果,主要包括以下几种类型:
String(字符串):
用于表示文本信息,如文件名、路径、错误信息等。
Integer(整型):
用于表示整数值,如图像尺寸、阈值、循环次数等。
Real(实型):
用于表示浮点数,提供比整型更高的精度,常用于图像处理中的参数设置。
Tuple(元组):
元组是Halcon中用于存储和处理数据的基本数据结构,它可以存储数字、字符串、图像、区域等各种类型的数据。
元组可以进行各种操作,如读取、修改、拼接、查询等,在Halcon中广泛应用于参数传递、结果返回和数据存储。
Handle(句柄):
句柄是一种特殊的控制参数,用于唯一标识一个对象或资源。在Halcon中,句柄可以用来表示窗体、文件、模板等对象。
halcon中常用逻辑运算符
在Halcon中,运算符(或称为操作符、函数)是执行各种图像处理任务的基本元素。这些运算符可以分为多个类别,每个类别都有其特定的功能和用法。以下是对Halcon中常见运算符的解析:
1. 数学和逻辑运算符
算术运算符:如加(+)、减(-)、乘(*)、除(/)等,用于对数值进行基本算术运算。
逻辑运算符:如与(and)、或(or)、非(not)等,用于进行逻辑判断和操作。
数学函数:如sin、cos、tan等三角函数,exp、log等指数和对数函数,以及pow、ldexp等幂函数,用于进行复杂的数学计算。
2. 控制流运算符
条件语句(if...endif、if...else...endif):根据条件判断的结果执行不同的代码块。
循环语句(for...endfor、while...endwhile、repeat...until):重复执行代码块直到满足特定条件。
控制语句(break、continue、return、exit、stop):用于控制循环和程序的执行流程。
3. 赋值和元组操作
赋值运算符(:=):用于将表达式的值赋给变量。
元组操作:包括元组的创建、合并、分割、选择元素等操作。元组是Halcon中用于存储和处理数据的基本数据结构,可以包含数字、字符串、图像、区域等多种类型的数据。
4. 字符串操作
字符串赋值和连接:使用单引号将字符串括起来,并使用加号(+)连接字符串。
字符串函数:如strlen(获取字符串长度)、strchr(在字符串中搜索字符)、strstr(在字符串中搜索子字符串)等,用于对字符串进行各种操作。
5. 特殊运算符
try...catch...endtry:用于捕获和处理程序执行过程中可能出现的错误。
dev_error_var()与dev_set_check():与try...catch...endtry类似,用于错误捕获和处理
6.图像处理运算符
图像加载(read_image):用于从文件系统中加载图像。支持多种图像格式,如BMP、JPEG、PNG等。
图像显示(disp_image):在图像窗口中显示图像。支持图像的缩放、平移和旋转等操作。
灰度转换(rgb_to_gray):将彩色图像转换为灰度图像,以便进行边缘检测、形状识别等任务。
图像滤波(filter):对图像进行滤波操作,如高斯滤波、中值滤波等,用于图像的平滑、增强和去噪。
边缘检测(edges_image):检测图像中的边缘,提取边缘轮廓。
形状匹配(find_shape_model):在图像中寻找特定形状的对象,通过事先学习的形状模板进行匹配。
数据类型和运算符
*整数
a:=10
*实型 小数
b:=12.1
*字符串
c:='zifuchuan'
*元组类似于数组但是却又很大的区别.在C#语言中数组存储的类型一定是一样的
*而Halcon不同的元组不同,他可以存储不同的类型的值并构成一连串的存储区域.
*元组[]中括号表示
nums:=[1,2,3,4,5,6,7,8,9]
*元组长度用||求元组的长度
len:=|nums|
*获取元组长度算子
tuple_length (nums, Length)
*不同类型的元组
array2:=['jack',1.2,1,[1,2]]
*获取元组值
d:=array2[0]
*修改元组值
array2[0]:=11
*布尔值()对的是true(1)错的是false(0)
result_true:=true
result_false:=false
*1.算数运算符 + - * / %(加减乘除余)
result_a:=1+2
result_b:=1-2
result_c:=1*2
result_d:=1/2
result_e:=1%2
*2.赋值运算符
x1:=0
x1:=x1+1
*3.关系运算符 == 或 = 都可以; != 或#都可以
result_f:=(1==1)
result_f1:=(1<=2)
result_g:=(1=1)
result_h:=(1!=2)
result_i:=(1#2)
*4.逻辑运算符
*逻辑与(and)
result_j:=(1==1)and(1!=2)
*逻辑或(or)
result_k:=(1==1)or(1!=2)
*逻辑非(not)
result_l:=not((1==1)or(1!=2))
x:=1
*if语句
if (x=1)
x:=2
endif
*不等于 # !=
if (x#1)
x:=3
endif
if (x!=1)
x:=4
endif
*if else 语句
if (x=1)
x:=3
else
x:=4
endif
*if elseif ..else 语句
if (x==1)
x:=1
elseif (x==2)
x:=2
elseif(x==3)
x:=3
else
x:=4
endif
y:=5
*逻辑与(and)
if (x<4 and y>3)
x:=5
endif
*逻辑或(or)
if (x<4 or y>3)
x:=6
endif
*逻辑非(not)
if (not(x=8))
x:=8
endif
*for循环
for Index:=1 to 5 by 1
test:=Index
endfor
for Index1:=0 to |nums|-1 by 1
x:=nums[Index1]
endfor
for Index2:=5 to 0 by -1
x:=Index2
endfor
*while 循环
result_m:=3
while (result_m<3)
endwhile
*switch语句 case
switch(x)
case 1:
break
case 2:
break
endswitch
result_n:=3.456
*取整
result_n_1:=int(result_n)
*保留0位小数 结果类型是字符串
g0:=result_n$'.0f'
*保留1位小数
g1:=result_n$'.1f'
*图像 类型(参数1:图像命名/参数2:图像路径)
read_image (Image,'C:/Users/32098/Pictures/Saved Pictures/kuqi.jpg')
*Region(区域)
threshold (Image,Region,100,255)
*从具有像素精度的图像提取XLD
threshold_sub_pix(Image,XLD,128)
*WindowHandle句柄
dev_open_window (0,0,512,512,'black',WindowHandle)
dev_display(Image)
元组操作
*元组操作
read_image (Image,'printer_chip/printer_chip_01')
Tuple1:=[1,0,3,4,5,6,7,8,9]
*给元组的某一个元素赋值
Tuple1[1]:=2
*批量修改元素的值
Tuple1[2,3,5]:='abc'
*生成0-10000的元组
Tuple2:=[0:10000]
*起始值为3 每次+1 最大值是200
Tuple3:=[3:1:200]
*起始值100每次递减10,最后一个元素-100
Tuple4:=[100:-10:-100]
TupleInt1:=[2,1,3,4,2]
TupleInt2:=[3,4,5,6,2]
*求并集
tuple_union (TupleInt1,TupleInt2,Union)
*求交集
tuple_intersection (TupleInt1,TupleInt2, Intersection)
*对元组的数据进行替换 索引0和1的值 替换为x,y
OriginalTuple:=[0,1,2,3,4,5]
tuple_replace (OriginalTuple,[0,1],['x','y'],Replaced)
*绝对值
Tuple5:=[-100,20,-40,50]
tuple_abs(Tuple5, Abs)
Halcon 算子参数
作用:
执行各种图像处理任务的基本单元。每个函数都有其特定的输入和输出参数,这些参数定义了函数如何工作以及产生的结果
输入参数
函数执行时所需的数据或设置,可以是图像、区域、控制变量(如整数、浮点数、字符串等)或任何其他可以传递给函数的数据类型。
输出参数
函数执行后产生的结果。输出参数可以是图像、区域、控制变量(如修改后的值)或任何其他数据类型。
threshold(Image, Region, MinGray, MaxGray, 'dark')
Image 是输入图像,MinGray 和 MaxGray 是控制阈值范围的输入参数,而 Region 是输出参数,表示根据阈值处理生成的区域。