咋对下面的程序提高运算速度

对LabVIEW IMAQ模块用的不多,回答仅供参考。你现在拖慢每个loop的是你的处理过程,200+fps还是挺快的,如果你等待处理之后再采集下一帧的话,处理时间不能超过4~5ms。具体建议,1. 先看看每一步操作具体费时多少,参照https://zone.ni.com/reference/en-XX/help/371361J-01/lvhowto/profiling_vis/ 或者简单地给你想查看的VI前后加上Get (high resolution) time https://decibel.ni.com/content/docs/DOC-23915 计算。2. 在保证不牺牲质量的前提下,在mode(IMAQ或者IMAQmx里有)里选择尽量小的分辨率,画幅越小数据量小,处理的越快。3. 使用Pipeline设计 https://zone.ni.com/reference/en-XX/help/371599H-01/lvfpgaconcepts/fpga_pipelining/ 把你的处理步骤拆分,然后用寄存器传递图像给下一步,这样每次循环的时间就是你最小处理单元中执行最长的那个时间。4. 如果细分后的每步处理时间还是大于采集时间,就buffer一下采集的信号,集中处理。参见IMAQ中的buffer资料。我没有建议使用生产者消费者架构,因为IMAQ中传递的是pic reference,一改全改,不像传统的数据流,所以这个架构可能不实用。5. 如果只要保证实时而不需要保证不丢帧,可以用生产者消费者循环加Lossy Queue来传递采集的图像,来不及处理的就即时丢掉了。
■网友
图像引用用队列确实比较麻烦,转化到数组分配内存对CPU和RAM都有一定的消耗。我之前做的是一个高分辨率图像采集分析保存的应用。当时是转换成UINT16数组发送到队列然后再用自定义的算法计算MTF什么的,优化半天发现最靠谱的还是加钱上双路E5。你现在的CPU和内存占用率如何?如果CPU计算不过来,建议屏蔽部分计算比如抽帧或者缩小分辨率。也可以配固态硬盘阵列先存下来然后再分析。内存不足建议加内存换64bit的LabVIEW,之前我的一个一亿像素图像处理程序全靠配了32G内存才跑动。


    推荐阅读