【LabVIEW调用VisionPro框架代码】 【主要包含内容】 【1】加载vpp,运行vpp,获取vpp结果数据; 【2】连接相机,相机采图,加载相机采图图片以及显示相机图片; 【3】读取本地图片加载至vpp,NI 图片转visionpro图片; 【4】图片保存/原图保存/ROI图片保存; 【5】标定流程/12点标定/上下相机映射标定范例程序代码; 【6】相机图像实时采集显示; 【7】内存管理(避免内存泄露) 【8】参数设置(如相机曝光,亮度等) 以上所有视觉部分内容均是visionpro完成,labview只负责调用以及获取最终结果。 【

最近在工作中接触了不少机器视觉的项目,其中涉及到 LabVIEW 和 VisionPro 的结合使用。VisionPro 是 Cognex 公司的视觉开发工具包,功能强大,但很多时候我们需要在 LabVIEW 中调用它来完成图像处理任务。这篇文章就来分享一下我在实际开发中使用 VisionPro 的经验和代码示例。

1. VisionPro 的基本流程

VisionPro 通常负责复杂的图像处理算法,比如图像识别、检测、测量等,而 LabVIEW 主要负责调用这些已经开发好的 VPP(VisionPro Project)文件,并获取处理结果。

1.1 加载 VPP 文件

加载 VPP 文件是 VisionPro 使用的第一步。VPP 文件包含了我们预先开发好的图像处理算法和配置。加载完成后,我们就可以运行它并获取处理结果。

VPP = VisionPro.Project.Load(vppPath)

以上代码中,`vppPath` 是 VPP 文件的路径。需要确保路径正确,并且 VPP 文件已经导出。

1.2 运行 VPP 文件

运行 VPP 文件后,我们可以通过 GetInspectionResults 获取处理结果。

result = VPP.GetInspectionResults()

`result` 包含了 VPP 文件处理后的所有结果,比如目标位置、尺寸等信息。这些结果可以用于后续的逻辑处理。

2. 相机采集

在机器视觉应用中,相机采集是核心部分。VisionPro 提供了丰富的相机接口,支持各种工业相机。

2.1 连接相机

连接相机可以通过 VisionPro 的相机接口实现。以下是连接相机的代码示例:

camera = VisionPro.Device.Camera.Connect(cameraId)

`cameraId` 是相机的唯一标识符,通常可以在相机的属性中找到。

2.2 采集图像

采集图像可以通过 Grab 方法实现。以下是采集图像并显示的代码示例:

imageData = camera.Grab()
VisionPro.Display.Show(imageData)

`imageData` 是采集到的图像数据,`VisionPro.Display.Show` 用于显示图像。

3. 图像数据预处理

VisionPro 提供了丰富的图像处理功能,但在 LabVIEW 中也可以进行一些简单的预处理。

3.1 读取本地图片

如果需要处理本地图片,可以使用以下代码:

localImage = VisionPro.Image.Load(localImagePath)

`localImagePath` 是本地图片的路径。

3.2 图片转换

在 VisionPro 中使用 LabVIEW 的图片需要进行格式转换。以下是转换代码:

visionProImage = VisionPro.Image.CreateFromPixels(localImage)

`localImage` 是 LabVIEW 格式的图片,`visionProImage` 是 VisionPro 格式的图片。

4. 图像保存

保存图像在开发和调试过程中非常重要。以下是保存图像的代码示例:

VisionPro.Image.Save(visionProImage, savePath, VisionPro.ImageFormat.PNG)

`savePath` 是保存路径,`VisionPro.ImageFormat.PNG` 是保存格式。

4.1 保存 ROI 图像

如果有 ROI(感兴趣区域)需要单独保存,可以使用以下代码:

roiImage = VisionPro.Image.GetROI(visionProImage, roiRect)
VisionPro.Image.Save(roiImage, roiSavePath, VisionPro.ImageFormat.PNG)

`roiRect` 是 ROI 区域的矩形坐标,`roiSavePath` 是 ROI 图像的保存路径。

5. 标定流程

标定是机器视觉应用中非常重要的一环。以下是两种常见的标定方法。

5.1 12 点标定

12 点标定是常用的标定方法,通过标定板上的 12 个特征点来计算相机的参数。

calibrationPoints = VisionPro.Calibration.GetPointsFromImage(calibrationImage)
Camera.Calibrate(calibrationPoints)

`calibrationImage` 是包含标定板图像的图片。

5.2 上下相机映射标定

在一些应用中,需要对上相机和下相机的图像进行映射标定。

upperCamera = VisionPro.Device.Camera.Connect(upperCameraId)
lowerCamera = VisionPro.Device.Camera.Connect(lowerCameraId)
upperImage = upperCamera.Grab()
lowerImage = lowerCamera.Grab()
VisionPro.Calibration.MapCameras(upperImage, lowerImage)

`upperCameraId` 和 `lowerCameraId` 分别是上相机和下相机的 ID。

6. 实时图像采集显示

在实际应用中,实时图像采集和显示是非常重要的功能。

While(true)
    imageData = camera.Grab()
    VisionPro.Display.Show(imageData)
End While

以上代码实现了相机的实时采集和显示。

7. 内存管理

内存管理在长期运行的程序中非常重要,避免内存泄漏是关键。

Function Cleanup()
    camera.Disconnect()
    VisionPro.Project.Unload(VPP)
    VisionPro.Image.Dispose(localImage)
End Function

在程序结束时调用 `Cleanup` 函数,确保所有资源被正确释放。

8. 参数设置

在机器视觉应用中,相机的参数设置非常重要,比如曝光时间、亮度等。

camera.SetParameter("ExposureTime", exposureValue)
camera.SetParameter("Brightness", brightnessValue)

`exposureValue` 和 `brightnessValue` 是曝光时间和亮度的设置值。

总结

通过以上代码示例,可以看到 LabVIEW 调用 VisionPro 的一些常见操作。VisionPro 提供了强大的图像处理功能,而 LabVIEW 则提供了灵活的控制和接口,两者结合可以实现复杂的机器视觉应用。开发过程中需要注意内存管理和代码规范,确保程序的稳定性和可靠性。希望这篇文章能对大家的开发工作有所帮助!

更多推荐