3、图像获取(文件、相机)

  1. 读取单张图片:

read_image (Image, 'C:/Jellyfish.jpg')

注:Halcon表示路径的方法更window是表示的不太一样,Halcon用这个 / 分割 ,而windows是用 \

    注:读入单张图片也可以直接把图片拖拽到HDevelop中,它会自动生成代码。

  1. 读入一组图片

    方式一:

    *创建一个路径数组

    ImagePath:=[]

    ImagePath[0]:='C:/图片/1.jpg'

    ImagePath[1]:='C:/图片/2.jpg'

    ImagePath[2]:='C:/图片/3.jpg'

    for i := 0 to 2 by 1

    read_image (Image,ImagePath[i] )

    endfor

    方式二:

    for i := 1 to 3 by 1

     read_image (Image,'C:/图片/' + i + '.jpg' )

endfor

  1. 打开某一文件夹下所有的图片或该文件夹的子文件夹的图片

    ①打开获取图像助手

    ②选择文件夹路径

    ③插入代码

    插入的代码如下:

    list_files ('C:/图片', ['files','directories', 'recursive','follow_links'], ImageFiles)

tuple_regexp_select (ImageFiles,

['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima)$','ignore_case'], ImageFiles)

 

for Index := 0 to |ImageFiles| - 1 by 1

read_image (Image, ImageFiles[Index])

* Do something

endfor

    注:(1)、list_files中的第二个参数有:

            'files':指定搜索的格式是文件

'directories':指定的搜索格式为文件夹(文件夹也当作一个路径选择)

'recursive':递归,指可以遍历子文件夹里面的文件

'follow_links':暂时不管

'max_depth 5':指遍历深度

'max_files 1000':最大文件数

        2)、tuple_regexp_select算子表示对ImageFiles路径中文件进行筛选,第二个参数表示入选的格式,

                其中 \\. 表示 转义成 .

                ignore_case表示不区分大小写。

  1. 像第3点中一样打开获取图像的助手。

    图像获取接口有很多,如笔记本自带的摄像头(DirectShow)、GigeVison、Firewire等,也可以通过自动检测,检测本计算机现在可以连接的摄像头。选择好接口后就可以点击实时显示按钮进行实时显示。

    实时显示后即表示相机可以正常取像,这时也可以修改一些相机的相应参数,如显示rgb彩色图还是灰色图等。

    但点击代码生成就可以生成相应的代码。

    open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', 'Integrated Camera', 0, -1, AcqHandle)

    grab_image_start (AcqHandle, -1)

    *用一个循环来不断取像

    while (true)

    grab_image_async (Image, AcqHandle, -1)

    * Do something

    endwhile

    *退出循环时关闭相机

    close_framegrabber (AcqHandle)

  2. (1)、使用图像助手先把相机连接上HDevelop

    (2)、在"参数"选项中打开触发模式,并把曝光时间调大(是图像更加明亮便于观察)

    (3)、把时间限制(timeout)调大哦,防止过久没出发抛出错误。

            

    (4)、插入代码:

    open_framegrabber ('GigEVision', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', 'basler_right', 0, -1, AcqHandle)

    set_framegrabber_param (AcqHandle, 'TriggerMode', 'On')

    set_framegrabber_param (AcqHandle, 'ExposureTimeAbs', 500.0)

    set_framegrabber_param (AcqHandle, 'grab_timeout', 10000)

    grab_image_start (AcqHandle, -1)

    i:=0

    while (true)

    grab_image_async (Image, AcqHandle, -1)

    * Do something

    i:=i+1

     

    if(i=5)//触发5次后推出循环

    break

    endif

    endwhile

    close_framegrabber (AcqHandle)

    代码分析详细看日志《10GigE Vision相机连接以及触发》

     

  3. 索引其实就是一个后缀名为.seq的文件。其文件中存放的就是一些图片的路径。可以通过txt文本建立并输入路径后在修改txt文档的后缀名为seq

    打开获取图像的助手,选择接口为File,并插入代码并ba代码中的第十三个参数修改为索引表(.seq)的路径

    插入的代码如下:

    open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'C:/picture/in.seq', 'default', 1, -1, AcqHandle)

    grab_image_start (AcqHandle, -1)

    while (true)

    grab_image_async (Image, AcqHandle, -1)

    * Do something

    endwhile

    close_framegrabber (AcqHandle)

        注:尽量不要用汉字来作为路径,txt文本的编码格式应该设置为ANSY编码格式。

posted @ 2022-04-30 20:45  ihh2021  阅读(545)  评论(0编辑  收藏  举报