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

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

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

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

我只想读蓝字……

任何指导都非常感谢。

试试这个;)但那是不安全的代码。

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(); } 

将图像的颜色修改为灰度,然后使用OCR

 public Bitmap MakeGrayscale(Bitmap original) { //make an empty bitmap the same size as original Bitmap newBitmap = new Bitmap(original.Width, original.Height); for (int i = 0; i < original.Width; i++) { for (int j = 0; j < original.Height; j++) { //get the pixel from the original image Color originalColor = original.GetPixel(i, j); //create the grayscale version of the pixel int grayScale = (int)((originalColor.R * .3) + (originalColor.G * .59) + (originalColor.B * .11)); //create the color object Color newColor = Color.FromArgb(grayScale, grayScale, grayScale); //set the new image's pixel to the grayscale version newBitmap.SetPixel(i, j, newColor); } } return newBitmap; } 

您可以修改调色板,使图像上只有黑色和白色