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