假设我有一系列黑白图像,而不是灰度图像。我正在尝试计算所有图像的平均值。我有一些应该有效的示例代码,但我想知道是否有更好的方法?
Bitmap[] Images = ReadAndScale(Width: 50, Height: 50);
int Width = 50;
int Height = 50;
double[,] Result = new int[50,50]
for (int i = 0 i < Images.Count; i++)
{
for (int j = 0; j < Width; j++)
{
for (int k = 0; k < Height; k++)
{
Result[j, k] += Images[i].GetPixel(j,k) == Color.White ? 0
: 1.0 / (double)Images.Count;
}
}
}
在这些循环结束时,你有一个包含平均值的数组Result []; &GT; .5是黑色,否则平均值是白色。
答案 0 :(得分:0)
好吧,你可以让图像成为内循环,并在你保证平均值小于或大于0.5时立即爆发。不确定这是否真的“更好”。
答案 1 :(得分:0)
嗯,我认为你的通用算法很好,而不是一种让它变得更好的方法。
我认为你能让它“变得更好”的唯一方法就是从中获取更多的表现,但是你需要吗?
我看到的主要性能问题是使用GetPixel(),因为它是一种相对较慢的方法。以下是使用运行速度更快的不安全代码的示例:Unsafe Bitmap
不要让“不安全”这个词吓到你,它只是在C#中启用真指针的关键字。