open_framegrabber (AcqName, 1, 1, 0, 0, 0, 0, ‘default’, -1, ‘default’, -1, ‘false’, CameraType, myBoard, -1, -1, AcqHandle)
使用操作符 open_framegrabber 打开与图像采集设备的连接时,主要参数是相应 HALCON 采集接口的名称。因此,您将获得一个所谓的句柄 (AcqHandle),通过它您可以访问图像采集设备,例如,在调用操作者grab_image 时。
图 2.1:a) 获取的图像;b) 处理过的图像(自动分割)
在示例中,大多数其他参数使用默认值(‘default’ 或 -1)
第 2 步:抓取图像
grab_image (Image, AcqHandle)
成功连接到您的图像采集设备后,您可以通过调用带有相应句柄 AcqHandle 的操作符grab_image 来抓取图像。
第 3 步:循环抓取和处理图像
while (Button != 1)
grab_image (Image, AcqHandle)
dev_set_window (WindowHandle)
dev_display (Image)
* -》 process image (segment with an automatically determined threshold)
auto_threshold (Image, Regions, 4)
connection (Regions, ConnectedRegions)
dev_set_window (WindowHandleProcess)
dev_display (ConnectedRegions)
* -》 check for a click into the window (error handling switched off, otherwise the cursor must always be in the window)
dev_set_check (‘~give_error’)
get_mposition (WindowHandleButton, Row, Column, Button)
dev_set_check (‘give_error’)
endwhile
在示例中,然后使用运算符 auto_threshold 自动分割抓取的图像(见图 2.1)。这是在循环中完成的,可以通过用鼠标左键单击窗口来退出。
3、连接到您的图像采集设备
在本节中,我们将展示如何连接到不同配置的图像采集卡和相机,从一个相机连接到一个图像采集卡的简单情况到更复杂的情况,例如多个同步相机连接到 一块或多块板。
3.1 打开指定配置的连接
用操作符 open_framegrabber,您可以打开与图像采集设备的连接。这种连接由四个参数描述(见图 3.1):首先,您选择一个带有参数 Name 的采集接口。参数 Device 指定实际的板卡或相机;根据采集接口,该参数可以包含描述板的字符串或简单的数字(以字符串的形式!)。通常,相机可以连接到不同端口的图像采集卡,其数量可以通过参数 Port(在极少数情况下为 LineIn)来选择。参数 CameraType 描述了连接的摄像头:对于模拟摄像头,该参数通常指定使用的信号范数,例如,‘ntsc’。对于数码相机,此参数通常指定相机型号;更复杂的采集接口使用此参数来选择相机配置文件。
因此,open_framegrabber 在参数 AcqHandle 中返回打开连接的句柄。请注意,如果您使用 HALCON 的 COM 或 C++ 接口并通过相应的类调用操作符,例如 C++ 中的 HFramegrabber,则不会返回句柄,因为类的实例本身充当您的句柄。
使用 HDevelop 的图像采集助手,您可以轻松连接到您的图像采集设备并选择合适的参数
3.2 连接多个板卡和摄像头
大多数 HALCON 采集接口允许使用多个图像采集卡和相机。但是,连接摄像机和电路板以及从 HALCON 内部访问这些配置的方法不止一种。下面,我们描述不同的配置;请检查您的图像采集设备的 HALCON 接口的在线文档(请参阅 %HALCONROOT%dochtmlmanuals、Windows 开始菜单中的 HALCON 文件夹,或 http://www.halcon.com/image-acquisition) 它支持哪些配置。
3.2.1 单摄像头
图 3.2a 显示了最简单的配置:单个摄像头连接到单个板上,可通过单个手柄访问。一些图像采集卡,尤其是数字图像采集卡,只支持这种配置;如以下部分所述,您仍然可以通过将每个摄像头连接到单独的电路板来使用具有此类图像采集卡的多个摄像头。请注意,此配置是通过 USB 2.0、IEEE 1394 或 GigE 连接的数码相机的典型配置。
3.2.2 Multiple Boards
图 3.2b 显示了具有多个摄像头的配置,每个摄像头都连接到单独的电路板。在这种情况下,您在 HDevelop 示例程序 solution_guideimage_acquisitionmultiple_boards.hdev 中为每个连接调用一次操作符 open_framegrabber。
图 3.2:a) 单板单摄像头;b) 多块板,每块带一个摄像头;c) 带有一个或多个摄像头的多块板;d) 单板多摄像头和端口切换;e) 单板多摄像头同时抓取;f) 使用多个电路板和相机同时抓取
open_framegrabber (AcqName, 1, 1, 0, 0, 0, 0, ‘default’, -1, ‘default’, -1, ‘default’, ‘default’, Board0, -1, -1, AcqHandle0)
open_framegrabber (AcqName, 1, 1, 0, 0, 0, 0, ‘default’, -1, ‘default’, -1, ‘default’, ‘default’, Board1, -1, -1, AcqHandle1)
在此示例中,两个调用仅在参数 Device(“0”和“1”)的值上有所不同;当然,您也可以为其他参数使用不同的值,甚至可以连接到不同的图像采集接口。
要从两个摄像头抓取图像,您只需使用两次调用 open_framegrabber 返回的两个句柄调用一次操作符grab_image:
grab_image (Image0, AcqHandle0)
grab_image (Image1, AcqHandle1)
3.2.3 每块板有多个手柄
许多图像采集卡提供多个输入端口,因此允许将多个摄像头连接到板上。根据 HALCON 采集接口的不同,可以通过本节和以下各节中描述的不同方式访问此配置。
连接相机的标准HALCON方法如图3.2c所示:每个连接都有自己的句柄,即open_framegrabber为每个相机调用一次,参数Port的值不同,如HDevelop示例程序solution_guideimage_acquisition multiple_ports.hdev:
open_framegrabber (AcqName, 1, 1, 0, 0, 0, 0, ‘default’, -1, ‘default’, -1,
‘default’, ‘default’, Board0, Port0, -1, AcqHandle0)
open_framegrabber (AcqName, 1, 1, 0, 0, 0, 0, ‘default’, -1, ‘default’, -1,
‘default’, ‘default’, Board1, Port1, -1, AcqHandle1)
grab_image (Image0, AcqHandle0) grab_image (Image1, AcqHandle1)
如图 3.2c 所示,您还可以使用多个板卡连接多个摄像头
3.2.4 端口交换
一些图像采集接口不通过多个手柄访问相机,而是通过动态切换输入端口(见图 3.2d)。因此,open_framegrabber 只被调用一次,就像在 HDevelop 示例程序 solution_guideimage_acquisitionport_switching.hdev 中一样:
open_framegrabber (AcqName, 1, 1, 0, 0, 0, 0, ‘default’, -1, ‘default’, -1, ‘default’, ‘default’, ‘default’, 0, -1, AcqHandle)
在抓取图像之间,您使用运算符 set_framegrabber_param 切换端口
set_framegrabber_param (AcqHandle, ‘port’, Port0)
dev_set_window (WindowHandle0)
grab_image (Image0, AcqHandle)
set_framegrabber_param (AcqHandle, ‘port’, Port1)
dev_set_window (WindowHandle1)
grab_image (Image1, AcqHandle)
注意,端口切换仅适用于兼容(类似)相机,因为 open_framegrabber 仅被调用一次,即所有相机使用相同的参数值集。相比之下,当如上所述使用多个手柄时,您可以为各个相机指定不同的参数值(有一些特定于板的限制)。
3.2.5 同时抓取(仅针对特定接口)
在上述配置中,图像是通过多次调用操作者grab_image从单个相机中抓取的。相比之下,一些采集接口允许通过一次调用grab_image从多个摄像头抓取图像,然后返回多通道图像(参见图3.2e;第51页的附录A.1包含有关多通道图像的更多信息) 。 这种模式称为同时抓取(或并行抓取);与端口切换一样,它仅适用于兼容(类似)的相机。例如,您可以使用此模式从立体相机系统中抓取同步图像。请注意,同时抓取仅适用于极少数图像采集接口。
在这种模式下,open_framegrabber 只被调用一次,可以在 HDevelop 示例程序 solution_guideimage_acquisitionsimultaneous_grabbing.hdev 中看到:
open_framegrabber (AcqName, 1, 1, 0, 0, 0, 0, ‘default’, -1, ‘default’, -1, ‘default’, ‘default’, ‘default’, 0, -1, AcqHandle)
您可以使用运算符 count_channels 检查返回图像(通道)的数量
grab_image (SimulImages, AcqHandle)
count_channels (SimulImages, num_channels)
并根据图像数量提取单个图像,例如使用分解2、分解3等:
if (num_channels == 2)
decompose2 (SimulImages, Image0, Image1)
或者,您可以使用 image_to_channels 将多通道图像转换为图像数组,然后通过 select_obj 选择单个图像。
3.3 请求有关图像采集接口的信息
如前所述,各个 HALCON 采集接口在 HTML 页面上有详细描述,这些页面可以在目录 %HALCONROOT%dochtmlmanuals 或 Windows 开始菜单的 HALCON 文件夹中找到(如果您安装了文档)。另一种访问图像采集接口信息的方法是使用操作符 info_framegrabber。
在HDevelop示例程序solution_guideimage_acquisitioninfo_framegrabber.hdev(为HALCON 1394IIDC接口预配置,请根据自己的图像采集设备调整接口名称)多次调用该算子查询接口版本号、可用设备 ,端口号,相机类型,以及open_framegrabber所有参数的默认值;结果,即 HDevelop 变量窗口中显示的值,如图 3.3 所示。
info_framegrabber (AcqName, ‘general’, GeneralInfo, GeneralValue)
info_framegrabber (AcqName, ‘revision’, RevisionInfo, RevisionValue) info_framegrabber (AcqName, ‘info_boards’, BoardsInfo, BoardsValue) info_framegrabber (AcqName, ‘generic’, GenericInfo, GenericValue)
info_framegrabber (AcqName, ‘camera_type’, CamTypeInfo, CamTypeValue) info_framegrabber (AcqName, ‘defaults’, DefaultsInfo, DefaultsValue)
在使用 open_framegrabber 实际连接到图像采集设备之前,可以调用操作符 info_framegrabber。唯一的条件是已经安装了HALCON采集接口和设备驱动和SDK。
原文标题:3、连接到您的图像采集设备
编辑:黄飞
-
摄像机
+关注
关注
3文章
1577浏览量
59924 -
摄像头
+关注
关注
59文章
4797浏览量
95344
原文标题:3、连接到您的图像采集设备
文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论