C#中图像处理的最快方法是什么?

时间:2017-10-17 18:20:36

标签: c# image-processing

对于读取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秒! 有什么更好的方法呢?
谢谢,阿曼

0 个答案:

没有答案
相关问题