在c#中执行多个图像平均

时间:2014-06-12 07:12:35

标签: c# .net image-processing aforge

我希望计算出与我相同尺寸的3张不同图像的平均图像。我知道这可以在matlab中轻松完成。但是我如何在c#中解决这个问题?还有一个我可以直接用于此目的的Aforge.net工具吗?

2 个答案:

答案 0 :(得分:1)

我找到了一篇关于SO的文章,可能会指出你正确的方向。这是代码(不安全)

BitmapData srcData = bm.LockBits(
            new Rectangle(0, 0, bm.Width, bm.Height), 
            ImageLockMode.ReadOnly, 
            PixelFormat.Format32bppArgb);

int stride = srcData.Stride;

IntPtr Scan0 = srcData.Scan0;

long[] totals = new long[] {0,0,0};

int width = bm.Width;
int height = bm.Height;

unsafe
{
  byte* p = (byte*) (void*) Scan0;

  for (int y = 0; y < height; y++)
  {
    for (int x = 0; x < width; x++)
    {
      for (int color = 0; color < 3; color++)
      {
        int idx = (y*stride) + x*4 + color;

        totals[color] += p[idx];
      }
    }
  }
}

int avgB = totals[0] / (width*height);
int avgG = totals[1] / (width*height);
int avgR = totals[2] / (width*height);

以下是该文章的链接: How to calculate the average rgb color values of a bitmap

答案 1 :(得分:0)

ImageMagick可以非常简单地为您完成此操作 - 在命令行中您可以输入:

convert *.bmp -evaluate-sequence mean output.jpg

您可以同样计算一堆TIFF文件的中位数(而不是平均值)并保存在PNG输出文件中,如下所示:

convert *.tif -evaluate-sequence median output.png

简单,嗯?

有C / C ++,Perl,PHP和各种其他janguage接口的绑定,包括(由@dlemstra友情指出)可用的Magick.Net绑定here

ImageMagick功能强大,免费且可用here