如何将移动图像转换为黑白C#

时间:2018-11-07 14:50:25

标签: c# image-processing jpeg

我必须将图像转换为黑白图像,这是使用移动相机捕获的。
我已经阅读了与将图像转换为黑白有关的问题和答案,但是提供的解决方案对我没有帮助。 下面是我捕获的图像。

enter image description here

因此,我必须根据需要将上面的图像转换为黑白,以将其保存在应用程序文件夹中。
我已经尝试过使用C#代码,但是它给我的图像不完整。

代码1

Bitmap bmp = new Bitmap(@"c:\test.jpg");

            Bitmap bw = bmp.Clone(new Rectangle(0, 0, bmp.Width, bmp.Height),
      PixelFormat.Format8bppIndexed);

代码2

  Bitmap bmp = new Bitmap(@"c:\test.jpg");
int width = bmp.Width;
            int height = bmp.Height;
            int[] arr = new int[225];
            int i = 0;
            Color p;

            //Grayscale
            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width; x++)
                {
                    p = bmp.GetPixel(x, y);
                    int a = p.A;
                    int r = p.R;
                    int g = p.G;
                    int b = p.B;
                    int avg = (r + g + b) / 3;
                    avg = avg < 128 ? 0 : 255;     // Converting gray pixels to either pure black or pure white
                    bmp.SetPixel(x, y, Color.FromArgb(a, avg, avg, avg));
                }
            }  

但是两个代码都在转换原始图像,如下所示。 enter image description here

这可能是由于使用移动设备捕获图像时出现阴影所致。
请让我知道如何在不丢失图像的情况下将该图像转换为黑白图像。
有没有可以帮助我的图书馆。

1 个答案:

答案 0 :(得分:0)

在这里avg = avg < 90 ? 0 : 255;将阈值减小到90

或者您可以使用EmguCV,它变得更快,更容易,而且它们都给出相同的结果。

Image<Gray, byte> img = new Image<Gray, byte>("1.jpg");
img._ThresholdBinary(new Gray(90), new Gray(255));

enter image description here