2、Halcon基本介绍

 

目录

1、图像通道转换。

2、算子结构介绍

3、数组的创建和基本运算

4、矩阵的创建和基本运算

5、基本判断语句

6、halcon机器视觉实现步骤


1、图像通道转换

①、彩色图片一般有三通道:R、G、B。在图片的每个像素点上,通过R、G、B不同的三色值来组合成不同的色彩。在每一个像素点上R、G、B计算方法,如下面网格示意图所示:

例子:将程序演示:

*读取一副图片
dev_open_file_dialog ('read_image', 'default', 'default', Selection)
read_image (Image,Selection)

RGB通道分离:

*通道分离
decompose3 (Image, r, g, b)

②灰度图

又称灰阶图,把白色与黑色之间按对数关系分为若干等级,称为灰度。范围0-255。图像只有一个通道的图。灰度计算方式:v=a*R+b*G+c*B。

图像分析中,使用灰度图最多。

彩色图转灰度图程序:

*彩色图转换为灰度图
rgb1_to_gray (Image, GrayImage)

按住键盘Ctrl键,鼠标在图像上的时候,可以看到灰度值。(上面的两个数值是鼠标的x、y坐标,下方的一个数值是灰度值)

③、H、S、V:颜色通道转换。用的比较少,在需要进行颜色分析的时候使用。

H:色调 S:饱和度 V:色彩的明亮程度

*RGB通道转换为HSV通道
trans_from_rgb (r, g, b, h, s, v, 'hsv')

2、算子结构介绍

halcon算子是按照英文进行命名的,一般英文名就是代表的真实含义。算子结构为:功能类别_具体功能名称。比如read_image是读取图片的意思,read就是功能类别,image就是具体功能名称。

在编程的时候,输入了read,编译器自动就会筛选出read有关的算子。

算子分类:

dev_:系统、窗口有关的算子。比如dev_close_window ()关闭窗口、dev_open_window (0, 0, 512, 512, 'black', WindowHandle)打开窗口。

read_:读操作有关的算子。如:read_image(Image, '素材.bmp')读图片、read_ocr_class_mlp ('Industrial_0-9A-Z_NoRej.omc', OCRHandle)读halcon提供的字符串库文件。

write_:写操作有关的算子。write_image (Image, 'bmp', 0, 'sample')将图片写到程序目录下。

draw_:在界面上画图、画区域。画圆draw_circle (WindowHandle, Row, Column, Radius)、画矩形draw_rectangle1(WindowHandle, Row1, Column1, Row2, Column2)。由于是在窗口上画图,所以需要窗口句柄。因此在画图前先要关闭窗口、再打开窗口。算子如下:

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
draw_circle (WindowHandle, Row, Column, Radius)

画图的时候,鼠标左键按住拖动,画好了松开鼠标右键鼠标完成,绘制完成。

gen_:表示生成类的算子。比如生成圆算子gen_circle (Circle, Row, Column, Radius)。

region_:表示跟区域有关的操作。比如获得区域的的一个特征(面积)region_features (Circle, 'area', Value)。

get_:表示获取某些属性的算子。比如获取图像尺寸get_image_size (Image, Width, Height)、获取图像灰度值get_grayval (GrayImage, Rows, Columns, Grayval)。

set_:表示设置参数类的算子。设置图像灰度值set_grayval (Image1, Rows, Columns, Grayval)

tuple_:代表与数组有关的算子。如获取数组长度tuple_length (A, Length)

select_:代表筛选操作有关的算子。比如根据形状面积来筛选区域select_shape (Rectangle, SelectedRegions, 'area', 'and', 150, 99999)、将最大面积区域超过70%的筛选出来select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)。

contour开头的代表的轮廓XLD有关的算子

gray开头的代表的灰度有关的算子。

 

3、数组的创建和基本运算

halcon中的数组英文是tuple。需要先声明,再使用。

声明数组如:

*定义一个空数组:    A:=[]

*数组赋值-方法:       A:=[A,1]

*再添加3个元素:      A:=[A,[1,2,3]]

运算:

*每个元素相加
C:=A+B

*每个元素相乘
D:=A*B

*给数组赋值:

for index:=1 to 100 by 1 
    Grayval[index]:=255
endfor

*获得数组A的长度-方法1

length_A:=|A|


*获得数组A的长度-方法2

tuple_length (A, Length)

*获取数组A第0个元素值(第0对应实际第一个)

val_A_0:=A[0]

*获取数组A第2个元素值

val_A_2:=A[2]

 

4、矩阵的创建和基本运算

矩阵也是一组组的数据,与数组不同的是,矩阵不仅仅是一个集合,还可以求逆、求范数。矩阵的运算只能通过算子来实现,不能像数组一样直接进行运算。矩阵要想直接运算,只能转换为数组再操作。

①矩阵创建

*矩阵的创建--------2行2列
create_matrix (2,2,[1,2,3,4], MatrixID)

或者

*矩阵创建的-----方法2
A:=[1,2,3,4,5,6,7,8,9]
create_matrix (3, 3, A, MatrixID1)

②矩阵的相关获取

*获取矩阵单个元素的值------获取矩阵第0行、第1列的值
get_value_matrix (MatrixID, 0, 1, Value)  
*获取矩阵列表元素
get_full_matrix (MatrixID, Values)
*获取矩阵单个元素的值------获取矩阵第0行、第1列的值
get_value_matrix (MatrixID, 0, 1, Value)  

③矩阵求逆。

*矩阵的逆
invert_matrix (MatrixID, 'general', 0, MatrixInvID)
get_full_matrix (MatrixInvID, Values1)

④矩阵的范数

*矩阵的范数-------'2-norm'  2范数,还可以设置为1范数
norm_matrix (MatrixInvID, '2-norm', Value1)

 

5、基本判断语句

halcon判断语句常用的是if语句、for循环.

主要结构有:

if  (***) 

       *******

endif

if  (***) 
         *******
    elseif   (***) 
        *******
    else
          *******
endif

③for循环语句

for i := 1 to 5 by 1
       *******
endfor

程序举例:

array1:=[1,2,3,4,5]
array2:=[]
array3:=[]

for Index := 0 to 4 by 1
    array2[Index]:=Index*2
    if(array2[Index]>array1[Index])
        array3[Index]:=array2[Index]+array1[Index]
    elseif (array2[Index]>array1[Index])
        array3[Index]:=array2[Index]-array1[Index]
    else
        array3[Index]:=array2[Index]
    endif
    
endfor

 

6、halcon机器视觉实现步骤

①基本步骤:

图像预处理 ------》区域分割 ------》 区域筛选  ------》 特征分析、有用信息提取等

 

图像预处理:图像去噪、图像基本变化、图像增强、图像位置变化等。

 

③区域分割:将感兴趣的区域从原图像中分割出来。包括基于阈值的分割、聚类的分割等等。

 

④区域筛选:从分割出来的所有区域中,根据区域的某些特征,筛选出我们需要的区域。这些特征包括长度、长宽比例、凸性、圆度等等。

 

⑤特征分析:根据筛选的区域,对区域进行定量分析,包括区域的大小、外接圆、以及其他特征分析等,来判断区域是否满足条件要求。如果是测量类,需要对区域之间的关系进行分析等。

 

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Big_潘大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值