【发布时间】:2011-09-29 16:40:53
【问题描述】:
int DiferentPixels = 0;
Bitmap first = new Bitmap("First.jpg");
Bitmap second = new Bitmap("Second.jpg");
Bitmap container = new Bitmap(first.Width, first.Height);
for (int i = 0; i < first.Width; i++)
{
for (int j = 0; j < first.Height; j++)
{
int r1 = second.GetPixel(i, j).R;
int g1 = second.GetPixel(i, j).G;
int b1 = second.GetPixel(i, j).B;
int r2 = first.GetPixel(i, j).R;
int g2 = first.GetPixel(i, j).G;
int b2 = first.GetPixel(i, j).B;
if (r1 != r2 && g1 != g2 && b1 != b2)
{
DiferentPixels++;
container.SetPixel(i, j, Color.Red);
}
else
container.SetPixel(i, j, first.GetPixel(i, j));
}
}
int TotalPixels = first.Width * first.Height;
float dierence = (float)((float)DiferentPixels / (float)TotalPixels);
float percentage = dierence * 100;
使用这部分代码,我比较了每个像素的 2 个图像,是的,它可以返回差异百分比,因此它将第一个图像的每个像素与第二个图像的相同索引中的像素进行比较。但是这里有什么问题,我有一个巨大的精度也许它不应该那样工作,比较,也许有一些更好的算法更快,更灵活。 因此,任何人都知道如何转换比较,我应该继续进行还是应该比较每个像素的颜色或 ....
PS:如果有人有如何制作 Parallel 这个代码的解决方案,我也会接受它!就像将其扩展到 4 线程一样,他们会在四核中做得更快吗?
【问题讨论】:
-
图片有多大?除非它们非常大或者你有很多,否则并行化代码可能不值得。
-
@Matt 图像大小不是问题,但情况是它会连续比较很多图像,比如 100 个!这让我很困扰。
-
这似乎是并行化代码的好候选
-
@Matt 任何建议从哪里开始,因为我真的需要调整它
-
谁投了反对票,我真的很想知道为什么?因为更好的想法是我在等待的=)有勇气告诉我为什么投了反对票!
标签: c# image-processing bitmap comparison