计算像素差时的统一性能下降

时间:2018-04-08 14:56:12

标签: c# performance unity3d

我试图通过从webcamtexture统一获取视频源来计算玩家的兴奋度。 我正在计算每个帧的像素差异,并根据我正在计算得分(兴奋=帧序列中的数量变化)。 这里的问题是它占用了大量的处理器资源,并且随着计算的开始,帧速率会急剧下降。

以下是参考代码。

private Color[] prevPixels;

public float getExcitement(Color[] curPixels)
{
    float excitment = 0;

    // To store pixelArray for the first time when this method is called
    if (prevPixels == null)
        prevPixels = curPixels;

    else if(prevPixels != null && curPixels != null)
    {
        excitment = PixelDiff(curPixels);
        prevPixels = curPixels;
    }

    return excitment;
}

private float PixelDiff(Color[] curPixels)
{
    float diff = 0f;
    for(int i = 0; i < curPixels.Length; i++)
    {
        float r1 = prevPixels[i].r;
        float g1 = prevPixels[i].g;
        float b1 = prevPixels[i].b;

        float r2 = curPixels[i].r;
        float g2 = curPixels[i].g;
        float b2 = curPixels[i].b;

        float r = r2 - r1;
        float g = g2 - g1;
        float b = b2 - b1;

        diff += Mathf.Sqrt(r * r + g * g + b * b);
    }

    return diff;
}

请建议一个更好的方法来处理这个问题或另一种实际计算兴奋的方法。

1 个答案:

答案 0 :(得分:0)

不是存储整个网络摄像头纹理,而是存储例如最底部和最顶部的像素行,并计算它们之间的差异。结果将与整个网络摄像头纹理高度相关。