ColorMatrixを使用して別の解決策を。
ImageAttributes.SetColorMatrixを変更すると、イメージの色を変更できます。
明るさを微調整するためにしきい値を調整します。
ImageAttributes.SetThreshold
0に設定した場合は1
に設定すると、画像が反対、すべて白である。また、「反転」は、元のビットマップのカラーパターンに依存していることを考えるので、異なるアプローチを試してみてください。ピクセルの明るさを反転しないと、より良い解決策が得られることがあります。
どのような値が適しているかを確認するには、OCRを「訓練」する必要があります。
はこれらを見てみましょう:
Recoloring (MSDN)
ASCII Art Generator (CodeProject)
明るマトリックス: R =赤G =緑、B =青A =アルファチャンネルW =白(明るさ)
に輝度成分を変更します。ファイルから画像を取得し、 "反転"
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
を得る
string _path = @"Image Path";
FileStream _fs = new FileStream(_path, FileMode.Open, FileAccess.Read);
Image _img = new Bitmap(_fs);
クリップボード
Image _img = Clipboard.GetImage();
なお、このようにしてグラフィックスコンテキストを作成することの制限を有すると言われなければなりません。
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);
}
であなただけの操作で少しやり過ぎ可能です文字通り白黒の画像が入っていますか、灰色や他の(微妙な)色が含まれていますか?もしそうなら、どのように処理したいのですか? –
はこの白黒画像ですか? –
ええと、私は画像が純粋な白黒であるとは思っていません。なぜなら、色の1つを置き換えると空の画像が作られるからです。 – Nyerguds