Eine andere Lösung, um die Colormatrix verwendet wird.
Sie können dann ImageAttributes.SetColorMatrix ändern, um die Farbe eines Bildes zu ändern.
Regulieren Sie den Schwellenwert, um die Helligkeit fein einzustellen.
ImageAttributes.SetThreshold
Wenn auf 0 gesetzt, ist ein Bild, ganz weiß, das Gegenteil gesetzt, wenn auf 1
Beachten Sie auch, dass die „Inversion“ ist abhängig von der ursprünglichen Bitmap Farbmuster, so verschiedene Ansätze versuchen . Manchmal führt das Umkehren der Pixelhelligkeit nicht zu einer besseren Lösung.
Ihr OCR muss "trainiert" werden, um zu überprüfen, welche Werte besser zu ihm passen.
einen Blick auf diese nehmen:
Recoloring (MSDN)
ASCII Art Generator (CodeProject)
Helligkeit Matrix: R = Rot G = Grün B = Blau A = Alpha-Kanal W = Weiß (Helligkeit)
die Helligkeitskomponente ändern zu eine "Inversion" erhalten
R G B A W
R [1 0 0 0 0]
G [0 1 0 0 0]
B [0 0 1 0 0]
A [0 0 0 1 0]
W [b b b 0 1] <= Brightness
Holen Sie sich das Bild aus einer Datei
string _path = @"Image Path";
FileStream _fs = new FileStream(_path, FileMode.Open, FileAccess.Read);
Image _img = new Bitmap(_fs);
oder die Zwischenablage
Image _img = Clipboard.GetImage();
Es muss gesagt werden, dass auf diese Weise einen Grafikkontext zu schaffen Grenzen hat.
using System.Drawing;
using System.Drawing.Imaging;
var BW_Inverted_matrix = new float[][]
{
new float[] { -1, -1, -1, 0, 0},
new float[] { -1, -1, -1, 0, 0},
new float[] { -1, -1, -1, 0, 0},
new float[] { 0, 0, 0, 1, 0},
new float[] { 1.5f, 1.5f, 1.5f, 0, 1} //Adjusted: to combine with threshold
};
var BW_matrix = new float[][]
{
new float[] { 1, 1, 1, 0, 0},
new float[] { 1, 1, 1, 0, 0},
new float[] { 1, 1, 1, 0, 0},
new float[] { 0, 0, 0, 1, 0},
new float[] {-1, -1, -1, 0, 1}
};
using (Graphics gr = Graphics.FromImage(_img))
{
// Adjust the threshold as needed
float _threshold = 0.2f;
ImageAttributes _ImageAttributes = new ImageAttributes();
_ImageAttributes.SetColorMatrix(new ColorMatrix(BW_Inverted_matrix));
_ImageAttributes.SetThreshold(_threshold);
Rectangle _rect = new Rectangle(0, 0, _img.Width, _img.Height);
gr.DrawImage(_img, _rect, 0, 0, _img.Width, _img.Height, GraphicsUnit.Pixel, _ImageAttributes);
}
die Ist ankommendes Bild buchstäblich schwarz und weiß oder könnten Grautöne oder andere (subtile) Farben enthalten sein? Wenn ja, wie möchten Sie, dass diese behandelt werden? –
ist dieses Schwarz-Weiß-Bild? –
Ehh, ich bezweifle, dass das Bild rein schwarz und weiß ist, weil dann das Ersetzen einer der Farben ein leeres Bild erzeugen würde. – Nyerguds