c# - TPL 数据流 : Persist previous data

标签 c# .net task-parallel-library tpl-dataflow

我一直在使用生产者/消费者模式将 TPL 数据流用于图像处理管道。

我正在尝试找出最佳方法,以允许需要前一帧或持久对象的算法。

其中一个过程的示例是背景减法,其中通过将当前帧与动态背景模型进行比较来找到前景蒙版。

如何实现这一点的一个想法是在管道中创建一个循环:

是否有处理此类管道的标准方法?

是否存在与数据排序或异步操作相关的问题?

最佳答案

您不需要通过在管道中使用循环来使事情复杂化,就像在您的图像中一样,您所需要的只是将持久数据保存在一个变量中,该变量在调用处理函数之间持续存在。

如果您使用的是 lambda,则该变量可以是 lambda 之外的局部变量:

IPropagatorBlock<InputImage, OutputImage> CreateProcessingBlock()
{
    InputImage previousImage = null;

    return new TransformBlock<InputImage, OutputImage>(
        inputImage =>
        {
            var result = Process(inputImage, previousImage);
            previousImage = inputImage;
            return result;
        })
}

如果您在某个对象上使用实例方法,则该变量可以是该对象上的实例字段:

class Processor
{
    InputImage previousImage;

    public OutputImage Process(InputImage inputImage)
    {
        var result = Process(inputImage, previousImage);
        previousImage = inputImage;
        return result;
    }
}

…

new TransformBlock<InputImage, OutputImage>(new Processor().Process)

关于c# - TPL 数据流 : Persist previous data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25259515/

相关文章:

c# - 如何从数据 : URIs? 到 "download"

c# - 在没有 Visual Studio 的情况下分析 .Net 应用程序

.net - MSBuild ItemGroup,不包括 .svn 目录和文件

.net - 如何使用 Microsoft interop 将工作表开头的新列添加到现有 Excel

c# - 替代具有保证交付的 Dataflow BroadcastBlock

c# - 为什么这个任务会立即退出?

.NET 4.5异步与TPL

c# - 将异步放在不执行等待操作的 WebAPI Controller 操作上有什么好处?

c# - 在 C# 中测试类库

c# - 如何以编程方式在 Xamarin 中嵌入 View ?