石鑫华视觉 发表于 2024-3-25 09:24:48

LabVIEW Vision菜鸡互啄:使用生产者消费者连续采集处理图像

LabVIEW Vision菜鸡互啄:使用生产者消费者连续采集处理图像在前一视频“LabVIEW Vision生产者消费者采集处理图像”的基础上,基于连续采集和图像处理的过程,创建可连续采集图像+处理图像的自动运行事件响应。点击自动运行按钮后,响应按钮事件,自动运行入队列,在自动运行的消费者中实现连续的采集图像+处理图像的过程。LabVIEWVision生产者消费者连续处理图像视频号扫码观看初始化消费者初始化过程中,创建必要的图像缓存,这里因为只是做简单的彩色图像变成灰度图像,所以创建了两个缓存,一个是用于彩色图像的,一个是用于灰度图像的。图像缓存可以考虑引用状态机。打开相机生产者和消费者相机相关的功能,也可以考虑使用状态机,会更方便一些。采集单帧生产者和消费者单帧采集功能,每点击一次布尔按钮,则只采集一幅图像。这里的单帧,不同于Snap快照,仍然使用的是Grab或Get Image函数。连续采集生产者消费者连续采集则添加了一个While循环以实现连续执行。While循环是否停止,则由连续采集布尔按钮来确认。连续采集布尔按钮的机械动作设置成释放时转换。转换的新值为真时,则连续采集入队列去执行连续采集的消费者。而转换的新值为假时,则不执行连续采集的过程。处理图像生产者消费者处理图像功能,只是简单的使用了彩色图像变成灰度图像。可以在这里实现更多更复杂的功能。本示例未实现连续的采集图像-处理图像的过程。在后续的教程中再介绍。自动运行生产者消费者-正常采集图像时自动运行生产者消费者-相机超时等出错时自动运行的过程和连续采集的过程非常类似,在连续采集的基础上来实现的。直接先复制连续采集相关的生产者和消费者,然后做修改即可。自动运行时,需要做采集结果做一下判断,如果正常采集到了图像,那就做后续的图像处理。如果没有正常采集图像,例如相机打开了触发功能后输出了超时错误,或者是运行时相机掉线等出错,这时没有正常采集到图像时,是应该做一个基础判断的,出错后不应该再做图像处理的过程了。停止生产者消费者停止生产者消费者的实现,没有使用元素入队列,而是直接使用释放队列后生成的错误来实现的。当然,也可以在停止事件中添加元素入队列,将停止时需要释放的硬件资源、软件资源等放到相应的消费者中来处理,这时需要注意LabVIEW并行运行时的竞态关系,在释放队列前,最好添加一个延时以保证停止消费者能正常执行而不是先执行错误条件结构。
页: [1]
查看完整版本: LabVIEW Vision菜鸡互啄:使用生产者消费者连续采集处理图像

LabVIEW HALCON图像处理入门教程(第二版)
石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
《LabVIEW Vision函数实例详解》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23/24