• 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的尺寸等于主图像的尺寸时,才读取它们。

    1. *针对Halcon默认目录直接读取
    2. *读取一张图片:
    3. read_image(Image,'mreut')
    4. *读取3个图像到一个图像数组:
    5. read_image(Images,['ic0','ic1','ic2'])
    6. *设置图像的搜索路径为 '/mnt/images' and '/home/images':
    7. set_system('image_dir','/mnt/images:/home/images')
    8. *针对非Halcon默认目录的读取
    9. read_image(Image1,'d:/Documents/Desktop/001.png')

            方法2:

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

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

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

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

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

             方法1:

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

            方法2:

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

             方法3:

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

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

            方法4:

    1. *目录最后一定要有/
    2. path:='d:/Documents/Desktop/'
    3. ImagePath:=[]
    4. ImagePath[0]:='001.png'
    5. ImagePath[1]:='002.png'
    6. ImagePath[2]:='003.png'
    7. for i:=0 to 2 by 1
    8. read_image(Image1,path + ImagePath[i])
    9. 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 '指定最大搜索深度,其中''是指定最大深度的数字。因此,'max_depth 2'指定应该搜索Directory和所有直接子目录。如果符号链接应该跟随在后面,那么如果符号链接导致目录结构中的循环,搜索可能不会终止。因此,在files中最多返回100万个文件(和目录)。通过使用'max_files '指定一个不同的数字,该值可以减少。

    1. get_system ('operating_system', OS)
    2. if (OS{0:2} == 'Win')
    3. SEP := '\\'
    4. else
    5. SEP := '/'
    6. endif
    7. get_system ('example_dir', HalconExamples)
    8. ExampleDir := HalconExamples + SEP + 'hdevelop'
    9. 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)

  • 相关阅读:
    刷题笔记19——优势洗牌和去重保持字典序
    字符串转换整数 (atoi)
    Nginx部署Vue项目css文件能加载但是不生效
    二百三十三、Flume——Flume采集JSON文件到Kafka,再用Flume采集Kafka数据到HDFS中
    探索云原生技术之容器编排引擎-Kubernetes/K8S详解(3)
    【WebForms王者归来】在 ASP.NET Core 中运行 WebForms 业务代码,99%相似度!
    c++ isalpha isalnum isdigit islower isupper tolower toupper
    传输线感性耦合和距离的关系
    博途PLC增量式PID(支持正反作用和归一化输出)
    安全基础~通用漏洞5
  • 原文地址:https://blog.csdn.net/qq_45336030/article/details/126464815