对于读取2个图像并获得它们之间的差异,我在C#中使用此代码:
Bitmap Img1 = new Bitmap("D:\\Imgs\\Img1.png");
Bitmap Img2 = new Bitmap("D:\\Imgs\\Img2.png");
public static int[,] MatrisFromBMP(Bitmap bmp)
{
int width = bmp.Width, height = bmp.Height;
int[,] matris = new int[width, height];
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
Color c = bmp.GetPixel(i, j);
matris[i, j] = (c.R == 0 && c.G == 0 && c.B == 0) ? 0 : 1;
}
}
return matris;
}
public static Bitmap BMPFromMatris(int[,] matris, int width, int height)
{
Bitmap bmp = new Bitmap(width, height);
for (int i = 0; i < width; i++)
for (int j = 0; j < height; j++)
bmp.SetPixel(i, j, matris[i, j] == 1 ? Color.White : Color.Black);
return bmp;
}
这些是我的功能,这是我的过程:
int[,] Matris1;
int[,] Matris2;
int[,] Matris3;
Matris1 = MatrisFromBMP(Img1);
Matris2 = MatrisFromBMP(Img2);
Matris3 = MatrisFromBMP(Img2);
int dist = 0;
for (int i = 0; i < Img1.Width; i++)
{
for (int j = 0; j < Img1.Height; j++)
{
dist = Math.Abs(Matris1[i, j] - Matris2[i, j]);
Matris3[i, j] = dist;
}
}
Img3_p.Image = BMPFromMatris(Matris3, Img1.Width, Img2.Height);
这样可以正常使用但是对于每张尺寸为(1360 * 768)的照片需要5秒!
对我来说这是一个很长的时间,我只有不到0.5秒!
有什么更好的方法呢?
谢谢,阿曼