哇塞!LabVIEW搭配NI Vision模块的视觉通用免编程框架,开启视觉测试轻松之旅
基于LabVIEW搭配 NI Vision模块视觉通用免编程框架来了轻松玩转视觉小测试。 1、框架支持自定义显示窗口的数量 2、框架支持自定义TCP/IP通讯的IP和端口号 3、框架支持外部相机硬件配置配置完成后图像采集会自动调用对应的配置的相机ID 4、框架支持自定义标定流程九点标定可以进行标定流程图像处理自动根据九点标定算法和过去的图像坐标世界坐标进行坐标变换 5、框架支持自定义视觉流程每个流程可以自定义检测流程名称、自定义触发流程的指令、相机ID、通讯ID等功能 6、框架支持动态菜单根据配置的视觉流程自动生成对应的菜单应用 7、最最最重要的:每个相机视觉流程不需要编程、不需要编程、不需要编程直接根据封装好的工具进行拖拉配置即可完成一个视觉 ………………功能更多多 不在这一一列举你们想要的功能都有嘿各位技术小伙伴们今天要给大家分享一个超酷的玩意儿——基于LabVIEW搭配NI Vision模块的视觉通用免编程框架有了它玩转视觉小测试简直易如反掌。基于LabVIEW搭配 NI Vision模块视觉通用免编程框架来了轻松玩转视觉小测试。 1、框架支持自定义显示窗口的数量 2、框架支持自定义TCP/IP通讯的IP和端口号 3、框架支持外部相机硬件配置配置完成后图像采集会自动调用对应的配置的相机ID 4、框架支持自定义标定流程九点标定可以进行标定流程图像处理自动根据九点标定算法和过去的图像坐标世界坐标进行坐标变换 5、框架支持自定义视觉流程每个流程可以自定义检测流程名称、自定义触发流程的指令、相机ID、通讯ID等功能 6、框架支持动态菜单根据配置的视觉流程自动生成对应的菜单应用 7、最最最重要的:每个相机视觉流程不需要编程、不需要编程、不需要编程直接根据封装好的工具进行拖拉配置即可完成一个视觉 ………………功能更多多 不在这一一列举你们想要的功能都有咱们先来看看它都有哪些让人惊艳的功能。自定义显示窗口数量这个框架允许你根据实际需求自定义显示窗口的数量。比如说在一些复杂的视觉检测场景中你可能需要同时观察不同处理阶段的图像这时候就能派上用场啦。在LabVIEW里实现这个功能其实就是通过一些简单的界面布局设置。以下是一段简单示意代码这只是示意实际实现会更复杂些// 创建新的显示窗口函数示意 Function CreateNewDisplayWindow ( u32 numWindows, ref DisplayWindow[] windows ) { for (i 0; i numWindows; i) { windows[i] CreateWindow(); // 这里还可以添加对窗口的初始化设置比如大小、位置等 SetWindowPosition(windows[i], i * 100, i * 100); SetWindowSize(windows[i], 300, 300); } }这段代码简单模拟了创建多个显示窗口的过程通过循环创建指定数量的窗口并设置它们的位置和大小。自定义TCP/IP通讯的IP和端口号在实际项目中经常需要和其他设备进行数据交互通过TCP/IP通讯是常见方式。这个框架支持你自定义IP和端口号方便与外部设备对接。在LabVIEW中使用TCP/IP协议进行通讯有相应的函数库。比如下面这样设置IP和端口号// 设置TCP/IP通讯参数函数示意 Function SetTCPIPParameters ( string ipAddress, u16 portNumber, ref TCPIPConnection connection ) { connection.ip ipAddress; connection.port portNumber; // 这里可以添加连接初始化等操作 InitializeTCPIPConnection(connection); }上面代码将传入的IP地址和端口号设置到TCP/IP连接对象中并初始化连接。外部相机硬件配置框架对外部相机硬件配置非常友好配置完成后图像采集会自动调用对应的相机ID。在LabVIEW的NI Vision模块里操作相机是有一套成熟流程的。比如下面代码用于初始化相机并获取相机ID// 初始化相机并获取ID函数示意 Function InitializeCamera ( ref Camera camera, out u32 cameraID ) { camera CreateCamera(); if (camera.IsValid()) { cameraID camera.GetID(); // 这里还可以添加相机参数设置比如分辨率、帧率等 camera.SetResolution(1280, 720); camera.SetFrameRate(30); } }这段代码创建相机对象检查相机是否有效然后获取相机ID并设置一些常见参数。自定义标定流程九点标定标定在视觉处理中可是关键步骤这个框架支持自定义九点标定流程还能进行标定流程图像处理自动根据九点标定算法和过去的图像坐标与世界坐标进行坐标变换。下面是一个简化的九点标定计算示意代码实际算法复杂得多// 简化的九点标定坐标变换计算示意 Function NinePointCalibration ( Point2D imagePoints[9], Point2D worldPoints[9], out Matrix transformationMatrix ) { // 这里省略复杂的计算过程简单示意就是根据图像点和世界点计算变换矩阵 // 实际可能会用到最小二乘法等算法 transformationMatrix CalculateTransformationMatrix(imagePoints, worldPoints); }这段代码根据传入的图像坐标点和世界坐标点计算出坐标变换矩阵。自定义视觉流程框架支持自定义视觉流程每个流程可以自定义检测流程名称、自定义触发流程的指令、相机ID、通讯ID等功能。比如说在一个产品外观检测的视觉流程里你可以给每个检测步骤定义一个有意义的名称方便管理和调试。以下是自定义视觉流程设置的示意代码// 自定义视觉流程设置函数示意 Function CustomizeVisionProcess ( string processName, string triggerCommand, u32 cameraID, u32 communicationID, ref VisionProcess process ) { process.name processName; process.trigger triggerCommand; process.cameraID cameraID; process.communicationID communicationID; // 这里可以添加流程初始化等操作 InitializeVisionProcess(process); }这段代码将各种自定义参数设置到视觉流程对象中并初始化流程。动态菜单框架支持动态菜单根据配置的视觉流程自动生成对应的菜单应用。想象一下每次添加或修改视觉流程菜单都能自动更新多方便呀。在LabVIEW里实现动态菜单需要结合一些界面更新和数据绑定的技术。以下是一个简单思路代码// 根据视觉流程更新菜单函数示意 Function UpdateMenuBasedOnVisionProcess ( VisionProcess[] processes, ref Menu menu ) { menu.Clear(); for (i 0; i processes.Length; i) { MenuItem item CreateMenuItem(processes[i].name); item.Command processes[i].trigger; menu.AddItem(item); } }这段代码根据传入的视觉流程数组清空原菜单然后为每个视觉流程创建一个菜单项并添加到菜单中。最关键的免编程最最最重要的是每个相机视觉流程不需要编程直接根据封装好的工具进行拖拉配置即可完成一个视觉任务。这对于那些不太熟悉编程但又需要进行视觉检测的工程师来说简直是福音。就像搭积木一样把各种功能模块拖到合适的位置设置好参数一个视觉流程就搞定了。这个框架功能多多今天只是列举了一部分。可以说只要是你在视觉项目中想要的功能它大概率都能满足。怎么样是不是迫不及待想要去试试啦赶紧动手体验一下这个超酷的视觉通用免编程框架吧