基础篇01-图像基本操作

本节将简要介绍Halcon中有关图像的基本操作,包括图像读取、显示、格式转换保存等功能。了解这些内容,将为后续的图像处理做好准备。

目录

1. Halcon支持的图像格式

1.1 图像格式

1.2 Halcon支持的图像数据类型

2. Halcon读取图像文件

2.1 直接调用read_image算子读取图像

2.2 用“读取文件对话框”读取图像文件

3. Halcon显示图像文件

3.1 直接调用disp_image算子显示图像

3.2 调用disp_color算子显示彩色图像

3.3 调用dev_display算子显示多通道图像

4. Halcon保存图像文件

5. Halcon获取图像信息

5.1 获取图像的尺寸信息

5.2 获取图像的数据类型信息


1. Halcon支持的图像格式

Halcon支持多种图像格式,包括BMP、JPEG、PNG、GIF、TIFFRAW等。

在数据类型方面,Halcon同样支持丰富多样的类型,如byte、int1、uint2、int2、int4、int8、real、complex、vector_field_relative、vector_field_absolute、direction和cyclic等。

1.1 图像格式

  1. BMP格式:它是一种与硬件设备无关的图像文件格式,使用位映射存储格式,不采用其他任何压缩,因此文件占用空间较大。该格式支持1bit、4bit、8bit及24bit的图像深度,且在Windows环境中运行的图形图像软件都支持BMP图像格式。
  2. JPEG格式:它是一种有损压缩格式,其优点在于可以将图像压缩在较小的储存空间,适合网络传输。但缺点是图像中重复或不重要的资料会被丢失,容易造成图像数据的损伤。几乎所有的操作系统均支持该图像格式。
  3. PNG格式:全称是Portable Network Graphics,它是一种无损压缩的位图图像格式,广泛用于网页设计、图标制作等领域。它提供无损压缩图像文件,支持24位和48位真彩色图像,并支持透明背景和变显图像。
  4. GIF格式:全称是Graphics Interchange Format,用于以HTML语言方式显示索引彩色图像,在网络上应用广泛。支持透明背景和动画,网上流行的动图,都是GIF格式的。但该图像格式只支持256色,压缩率通常在50%左右。
  5. TIFF格式:全称是Tag Image File Format,它是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的一种无损压缩格式,压缩比较低,只有2-3倍,但易于处理。是Adobe公司PS软件在处理图像时使用的一种标准图像。
  6. RAW格式:未经处理直接从CCD或CMOS上所得到的原始图像信息,文件超大,但特别适合后期出片调整。
  7. 为0到255。

1.2 Halcon支持的图像数据类型

  1. byte:每像素1字节,无符号,值范围为0到255。
  2. int1:每像素1字节,有符号,值范围为-128到127。
  3. uint2:每像素2字节,无符号,值范围为0到65535。
  4. int2:每像素2字节,有符号,值范围为-32768到32767。
  5. int4:每像素4字节,有符号,值范围为-2147483648到2147483647。
  6. int8:每像素8字节,有符号(仅适用于x64系统),值范围为-9223372036854775808到9223372036854775807。
  7. real:每像素4字节,浮点类型,6位有效十进制数字精度,值范围为-3.4e38到3.4e38。
  8. complex:real类型的两个矩阵,向量。
  9. vector_field_relative:real类型的两个矩阵,向量。
  10. vector_field_absolute:real类型的两个矩阵,绝对坐标。
  11. direction:每像素1字节,无符号,值范围为0到179,角度除以2。数值180到254被自动设置为值255,这被解释为未定义的角度。
  12. cyclic:每像素1字节,无符号,循环算术,范围为0到255。

2. Halcon读取图像文件

根据待读取图像文件的数目不同,Halcon提供了两种不同的图像文件读取方式,分别是:

  1. 只处理单幅图像,调用read_image算子或read_multi_channel_image算子;
  2. 如果一次性处理多幅图像(如图像序列),调用read_sequence算子或read_image_sequence算子。

本节将重点介绍第一种方式,也就是读取单幅图像的操作。它有几种不同的实现方式。

2.1 直接调用read_image算子读取图像

read_image算子是Halcon官方提供的读取图像文件的算子。使用它一次可读取一幅指定路径下具有特定文件名的图像文件。

该算子的定义和参数说明如下:

read_image (Demo, 'E:/Demo.jpg')
  • Image为读取的图像变量名称,注意,这个变量名需是在程序里面使用的变量名;
  • FileName为图像文件所在的完整路径以及文件名。需要注意的是,文件名是需要带后缀的,且后缀对应的图像格式必须是上一节介绍的Halcon支持的图像格式。

在调用时,通常需要录入上面两个参数,两个参数中间用逗号间隔开即可。

下面来一个实例。假设要打开“E:\Demo.jpg”的图像文件,使用第一种方式是直接键入一下语句

read_image (Demo, 'E:/Demo.jpg')

2.2 用“读取文件对话框”读取图像文件

这种方式可以视为第一种方式的一种快捷实现方式。具体的实现步骤是:

  • 按CTRL+R快捷键打开读取图像对话框;
  • 在对话框中选择文件名称所在的路径及变量名称;
  • 选择语句插入位置;
  • 点击确定。

其关键步骤是第二步,即在呼出的对话框中设定待读取的图像文件的路径和变量名称,然后自动添加对应的代码段。与第一种方式相比,这种方式有效减少录入路径和文件名所需要的时间,同时也能避免因为录入信息有误所导致的错误(比如路径信息不正确等)。在此为Halcon的设计者点赞,不愧是德国人设计的软件,用户至上。

第二种方式是在呼出的读取文件对话框中,可以手动选取图像文件,变量名称也可手动修改,默认值是文件名(无后缀),如下图所示。点击确定,就会在光标处插入对应的代码(和上面的一行代码完全一致)。大家可以自己练习一下。

读取图像文件对话框示例

除了上面介绍的针对读取单幅图像操作之外,还可以通过其他算子完成针对图像序列数据的读取。等到用到时再详细介绍。

3. Halcon显示图像文件

完成图像数据的读取后,通常跟着一系列的处理算子。为了更直接地观察处理过程,通常需要在指定窗口中显示某个处理结果,此时就需要图像显示功能。

Halcon提供的丰富的图像显示操作算子,在此主要介绍三种常见方式:

  1. 简单图像显示操作,通过调用disp_image算子
  2. 彩色图像显示操作,通过调用disp_color算子;
  3. 通用图像显示操作,通过调用dev_display算子。

需要提前说明的是,上述各种显示图像的方式,都是在某个窗口里面显示图像信息的。该窗口可以提前创建,也可以临时创建。临时创建的优点是随用随创建,代码量小,但如果想在同一个窗口中完成不同的操作,则需要该窗口的句柄信息,这种情况下推荐提前创建窗口。

创建窗口的步骤一点都不复杂,首先使用dev_open_window算子创建一个窗口,然后使用dev_set_window算子将该窗口设置为活动窗口(即激活该窗口)。

具体操作可参考以下两行代码:

* 打开一个窗口
dev_open_window(0, 0, 512, 512, 'Demo', WindowHandle)

* 设置活动窗口
dev_set_window(WindowHandle)

以上代码完成的是,创建一个512*512大小的窗口,窗口名字是“Demo”,该名称会显示在床后的标题栏中,窗口的句柄是WindowsHandle,相当于该窗口对应的变量名。

下面详细介绍三种文件显示方法,最后配上一个实例,比较三种方法。

3.1 直接调用disp_image算子显示图像

使用disp_image算子显示图像非常简单,一般有两种方式,一种提供窗口句柄,一种是不需要提供句柄信息,如下:

  • disp_image(Image, WindowHandle)
  • disp_image(Image)

以后者为例,下面的代码完成读取图像和显示图像的功能,仅供参考。

* 读取图像
read_image(Image, 'example.tiff')
* 显示图像
disp_image(Image)

3.2 调用disp_color算子显示彩色图像

该算子只用于显示彩色图像,或者更准确地说,只用于显示RGB三通道的图像。

因此,在使用disp_color算子进行显示前,请确认带显示的图像是以RGB三通道形式存在。对于单通道的灰度图,需要提前使用convert_image_type算子可以将其转换为RGB格式:

* 将单通道灰度图Image转换为RGB三通道彩色图
convert_image_type(Image, ImageRGB, 'byte')
* 调用算子显示彩色图像
disp_color(ImageRGB)

其他方面,与disp_image算子使用要求一致。

3.3 调用dev_display算子显示多通道图像

最后介绍的dev_display算子是一种通用显示算子,能显示包括图像、区域、轮廓等在内的各类特定对象。该算子会根据输入参数中数据的类型信息,自动完成显示功能。

对于图像显示功能来说,disp_image算子和disp_color算子能做的事情,dev_display算子都能做,且可直接显示包括二值图像、单通道灰度图像、多通道彩色图像,等等。

在此也给出一个简单的实例,不再详细加以说明。

read_image(Image, 'example_image')
dev_display(Image)

4. Halcon保存图像文件

针对图像操作的三个基本操作,读取、显示和保存,本子节介绍最后的保存图像操作。

相对于读取和显示功能,在Halcon中实现图像保存操作的算子比较单一,主要通过write_image算子实现。该算子允许将图像保存为多种格式,如BMP、PNG、JPEG、TIFF等。以下是相关介绍及实例。

该算子的声明如下:

write_image(Image, Format, FillColor, FileName)

参数说明:

  • Image: 要保存的图像。
  • Format: 图像保存格式,如 'bmp', 'png', 'jpeg', 'tiff' 等。
  • FillColor: 填充颜色,通常用于单通道图像保存为多通道格式时。
  • FileName: 保存的文件路径及名称。

下面给出一个简单的实例

read_image(Image, 'particle')
* 保存图像
write_image(Image, 'bmp', 0, 'output_image.bmp')

5. Halcon获取图像信息

图像通常有空间分辨率(即长度宽度)、通道(单色图像还是彩色图像)、存储数据类型(单个像素点对应的存储数据类型)、图像格式等信息。Halcon提供了丰富的算子,方便快捷地获取上述图像信息。

5.1 获取图像的尺寸信息

可以使用get_image_size算子获取图像的尺寸信息。该算子的声明如下:

get_image_size(Image, Width, Height)

图像的宽度和高度信息,分别赋值给指定的变量中。

下面给出一个使用该算子进行指定窗口大小显示图像的实例。

* 读取图像
read_image(Image, './source.jpg')

* 获取图像尺寸
get_image_size(Image, Width, Height)

* 打开窗口并显示图像
dev_open_window(0, 0, Width, Height, 'black', WindowHandle1)
dev_display(Image)

在上述代码中,首先使用 read_image 算子读取图像,然后使用 get_image_size 算子获取图像的宽度和高度。接下来,使用 dev_open_window 和dev_display算子在指定大小的窗口(与图像尺寸一致)中显示图像。

5.2 获取图像的数据类型信息

可以使用get_image_type算子获取图像的类型信息。该算子的声明如下:

get_image_type(Image, Type)

该算子返回的图像类型包括12种,即Type ='byte', 'complex', 'cyclic', 'direction', 'int1', 'int2', 'int4', 'int8', 'real', 'uint2', 'vector_field_absolute', 'vector_field_relative'

至于各种类型的具体含义,以及对应的图像类型,在此不再详细介绍。另外,对于多通道的输入图像,该算子返回第一个通道的类型。

本节小结:

简要介绍了Halcon提供的图像操作基本三件套:读取、显示和保存。各位需要牢记每一种各种基本操作对应的算子。此外,还介绍了获取图像尺寸信息和数据类型信息的两个算子。

下一节将介绍Halcon有关图像几何变换的各种算子。

(初稿完成,最新更新2025-01-29)

本专栏将介绍基于Halcon的各种传统经典的数字图像处理技术,所介绍内容基本与Gonzalez的教材保持一致。作为学习和实践DIP技术的入门教程。

感谢大家的支持和浏览,本专栏将持续更新,每篇的篇幅控制在5000字左右,这样大家阅读起来也比较轻松。估计2025年上半年完成全部内容,欢迎加收藏。但由于到了假期,更新的速度不会很快。

本人保证,在专栏全部完成之前,将会一直免费。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值