我开发了一个c#应用程序,它输入由Kinect设备生成的streamRGB(640x480 rate:30fps)。收到每个帧后,我将其作为file.wmv保存在磁盘上。 当我尝试在保存之前操作每个帧时问题开始,导致流速率为30fps并且操作操作持续大约200ms(因此我只能获得5fps)。
我知道这是一个常见的问题。为解决这个问题,最常用的解决方案是什么?
答案 0 :(得分:1)
当您需要实时执行某些操作时,这是一个常见问题,但实际上这个问题实际上太慢而无法实现。第一个也是最重要的“解决方案”是提高实时操作的性能,使其足够快,但这通常是不可能的。
更现实的选择是建立要在另一个线程上处理的队列。这是消费者/生产者设计模式的完美示例,因为您可以生成框架并使用它们以尽快处理。要卸载内存,您可以将帧写入文件磁盘并在使用时读取它们。
另请注意,位图背后的代码GDI +是单线程的,它会将有关图像处理的所有内容锁定到单个线程。这可以使用不同的进程(每个核心一个)进行迁移,以优化机器性能。