Halcon 第一章『Halcon语言』◆第5节:读取图像

        一:单个或多个图像的简单读取 

        ·方法1:

        File / Images

        读取不同文件格式的图像。

read_image( : Image : FileName : )

        Image:输出参数,读取后的图像放入此名称的变量或元组中。

        FileName:输入参数,要读取的映像的名称。

        操作符read_image从后台存储中读取指定的图像文件并生成图像。可以在FileName中传递一个或多个文件名。如果传递了多个文件名,则返回一个图像对象元组,其中包含相应数量的图像对象。 

        除了HALCON格式,TIFF, GIF, BMP, JPEG, JPEG-2000, JPEG- xr, PNG, PCX, SUN-Raster, PGM, PPM, PBM,和XWD文件也可以读取。PBM图像的灰度值设置为0和255。文件格式要么由扩展名识别(如果指定的话),要么由文件的内部结构识别。如果扩展指示的图像可以更快地找到。如果没有指定扩展名,则优先选择有扩展名的文件,而不是没有扩展名的文件。对于PGM、PPM和PBM,可以使用相应的扩展名(例如' PGM ')或通用值'pnm'。在TIFF格式下,可接受' TIFF '和'tif'。在JPEG-XR的情况下,'jxr', 'wdp', 'wmp'和'hdp'是可以接受的。对于JPEG-2000,只接受“jp2”。对于彩色图像,创建具有三个颜色通道的图像,红色通道存储在第一,绿色通道存储在第二,蓝色通道存储在第三分量(通道号)。

        对于TIFF、PNG、JPEG-XR和JPEG-2000图像格式,二进制alpha通道被解释为域。对于TIFF文件,另外带有PhotometricInterpretation = TransparencyMask的二进制subifd被解释为域。否则,生成的图像对象的域(=矩阵中的所有像素)被选择为最大的。

        对于TIFF图像,多页TIFF文件以图像对象元组的形式返回。只有当TIFF文件中的subifd的尺寸等于主图像的尺寸时,才读取它们。

*针对Halcon默认目录直接读取
*读取一张图片:
read_image(Image,'mreut')

*读取3个图像到一个图像数组:
read_image(Images,['ic0','ic1','ic2'])

*设置图像的搜索路径为 '/mnt/images' and '/home/images':
set_system('image_dir','/mnt/images:/home/images')

*针对非Halcon默认目录的读取
read_image(Image1,'d:/Documents/Desktop/001.png')

        方法2:

也可在程序窗口中输入read_image后双击,选择文件,而后替换即可。

         方法3:菜单栏—文件—读取图像

         方法4:菜单栏—助手—打开新的Image Acquisition

ImageFiles := []
ImageFiles[0] := 'd:/Documents/Desktop/001.png'
ImageFiles[1] := 'd:/Documents/Desktop/002.png'
ImageFiles[2] := 'd:/Documents/Desktop/003.png'
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
endfor

         二、循环读取图像(多个文件或一个目录下的某些图像文件)

         方法1:

for i:=0 to 9 by 1
    read_image(Image,'D:/Documents/Desktop/' + i + '.bmp')
endfor
*只是这里的9需要自己提前确定数量

        方法2:

Num :=2
for i :=1 to Num by 1
    read_image (Image, 'autobahn/scene_'+(i$'02'))
    read_image (Image, 'D:/Documents/Desktop/' + i$'03')
endfor
'autobahn/scene_'+(i$'02')
 'D:/Documents/Desktop/' + i$'03'

         方法3:

list_files ('d:/Documents/Desktop', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
endfor

        这样可以对一个目录下的图像进行读取,也可以对图像的格式进行修改。

        方法4:

*目录最后一定要有/
path:='d:/Documents/Desktop/'
ImagePath:=[]
ImagePath[0]:='001.png'
ImagePath[1]:='002.png'
ImagePath[2]:='003.png'

for i:=0 to 2 by 1
    read_image(Image1,path + ImagePath[i])
endfor

        三、文件列表算子

        File / Misc

        列出一个目录中的所有文件。

list_files( : : Directory, Options : Files)

        Directory:输入参数,要列出的目录名称。

        Options:输入参数,处理选项。默认 'files',建议值【 'files', 'directories', 'recursive', 'follow_links', 'max_depth 5', 'max_files 1000'】。

        Files:输出参数,找到的文件(和目录)。

        list_files返回参数文件中directory给出的目录中的所有文件。当前目录可以用"或:'参数选项可以通过传递元组值来指定不同的处理选项。如果选项包含'files',则只返回Directory中存在的文件。如果传入'directories',则只返回Directory中存在的目录。目录以1'结尾(Windows)或7结尾(类unix系统)。如果需要同时返回文件和目录,则必须传入['files','directories]。如果'files'和'directories'都没有传递,list_files返回一个空元组。通过传递'递归',可以指定通过检查所有子目录递归搜索目录树。在类unix系上,'follow_links'可以用来指定到文件或目录的符号链接应该被跟随。在默认设置中,不解除符号链接的引用,因此,如果符号链接指向目录,则不进行搜索,如果指向文件,则不返回符号链接。对于递归搜索,可以使用'max_depth <d>'指定最大搜索深度,其中'<d>'是指定最大深度的数字。因此,'max_depth 2'指定应该搜索Directory和所有直接子目录。如果符号链接应该跟随在后面,那么如果符号链接导致目录结构中的循环,搜索可能不会终止。因此,在files中最多返回100万个文件(和目录)。通过使用'max_files <d>'指定一个不同的数字,该值可以减少。

get_system ('operating_system', OS)
if (OS{0:2} == 'Win')
    SEP := '\\'
else
    SEP := '/'
endif
get_system ('example_dir', HalconExamples)
ExampleDir := HalconExamples + SEP + 'hdevelop'
list_files (ExampleDir, ['files','recursive'], ExampleFiles)

        四、匹配元组的元素

        Tuple / String Operations

        选择匹配正则表达式的元组元素。

tuple_regexp_select( : : Data, Expression : Selection)

        Data:输入参数,输入要匹配的字符串。

        Expression:输入参数,正则表达式。默认 '.*',列表【 '.*', 'invert_match', 'ignore_case', 'multiline', 'dot_matches_all', 'newline_lf', 'newline_crlf', 'newline_cr'】。

        Selection:输出参数,匹配字符串

        tuple_regexp_select将expression中的正则表达式应用于Data中的一个或多个输入字符串,并返回Selection中的匹配字符串元素。这很方便,例如,用于过滤使用操作符list_files获得的文件列表。请参阅tuple_regexp_match的文档了解正则表达式的语法和选项。此外,tuple_regexp_select支持'invert_match'选项,它会导致那些不匹配正则表达式的输入字符串被选中。有关字符串操作的一般信息,请参见元组/字符串操作。如果输入元组为空,操作符返回一个空元组。

        HDevelop在线操作HDevelop为tuple_regexp_select提供了一个内联操作,可以在表达式中使用,语法如下:

        Selection := regexp_select(Data, Expression)

猜你喜欢

转载自blog.csdn.net/qq_45336030/article/details/126464815