C#中的图像处理 - 智能解决方案?

Sum*_*osh 4 c# image-manipulation image-processing

我有一个带字母的图像,字母有黑色和蓝色两种颜色,我想从图像中读取蓝色字母.

任何人都可以建议我在C#中执行此操作的方法.我正在研究GDI +,但仍然没有得到任何逻辑来开发这个程序..

我试过OCR它,但普通OCR的问题是他们不认识色差.

我只想读蓝字......

任何指导都非常感谢.

Ahm*_*ıcı 9

尝试这个;)但这是不安全的代码.

void RedAndBlue()
{

    OpenFileDialog ofd;
    int imageHeight, imageWidth;

    if (ofd.ShowDialog() == DialogResult.OK)
    {
        Image tmp = Image.FromFile(ofd.FileName);
        imageHeight = tmp.Height;
        imageWidth = tmp.Width;
    }
    else
    {
        // error
    }

    int[,] bluePixelArray = new int[imageWidth, imageHeight];
    int[,] redPixelArray = new int[imageWidth, imageHeight];
    Rectangle rect = new Rectangle(0, 0, tmp.Width, tmp.Height);
    Bitmap temp = new Bitmap(tmp);
    BitmapData bmpData = temp.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
    int remain = bmpData.Stride - bmpData.Width * 3;
    unsafe
    {
        byte* ptr = (byte*)bmpData.Scan0;
        for (int j = 0; j < bmpData.Height; j++)
        {
            for (int i = 0; i < bmpData.Width; i++)
            {
                bluePixelArray[i, j] = ptr[0];
                redPixelArray[i, j] = ptr[2];
                ptr += 3;
            }
            ptr += remain;
        }
    }
    temp.UnlockBits(bmpData);
    temp.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

  • 这是进行位图像素操作的正确方法.在这种情况下,"不安全"关键字是不幸的,因为如果你不擅长数学,它只是真的不安全."notaspathethicallyslowasgetpixelandsetpixel"将是一个更合适的关键字. (5认同)