Emgu OpenCVfor.NETを使用すると次のようなものが機能します。
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using System;
using System.Drawing;
using System.IO;
using (Image<Bgr, Byte> img = new Image<Bgr, Byte>("MyImage.jpg"))
{
Matrix<Int32> matrix = new Matrix<Int32>(img.Width, img.Height);
for (int i = 0; i<img.Height;i++)
{
for (int j = 0; j<img.Width;j++)
{
if (img.Data[i,j,2] == 255 &&
img.Data[i,j,1] == 255 &&
img.Data[i,j,0] == 255)
{
matrix.Data[i,j] = 0;
}
else
{
matrix.Data[i,j] = 1;
}
}
}
TextWriter tw = new StreamWriter("output.txt");
for (int i = 0; i<img.Height;i++)
{
for (int j = 0; j<img.Width;j++)
{
tw.Write(matrix.Data[i,j]);
}
tw.Write(tw.NewLine);
}
}
上記のスニペットはカラー画像をロードし、それ以外の場合は白を0、1としてマトリックスを作成することに注意してください。
グレースケール画像をロードして操作するために、はImage<Bgr, Byte>
になりImage<Gray, Byte>
、比較は単純化されて
if (img.Data[i,j,0] == 255)
。
また、しきい値処理(カラーからグレースケール、白黒への変換)を行うには、次のcvThreshold
ような方法を使用して、大津のしきい値処理を使用できます。
int threshold = 150;
Image<Bgr, Byte> img = new Image<Bgr, Byte>("MyImage.jpg");
Image<Gray, Single> img2 = img1.Convert<Gray, Single>();
Image<Gray, Single> img3 = new Image<Gray, Single>(img2.Width, img2.Height);
CvInvoke.cvThreshold(img2, img3, threshold, 255, THRESH.CV_THRESH_OTSU);
その他の可能なツールには次のものがあります
convert
リンクしたURLに記載されているように、 ImageMagickおよびpnmoraw
netpbmから、例のスニペットを使用し convert lib/dragon_face.xbm pbm: | pnmnoraw
ます。
- PIL(Python Image Library)を使用して画像データを反復処理し、PythonIO関数を使用して出力データを書き込みます
- System.Drawing.Bitmapを使用して、具体的にはGetPixelメソッドを使用して画像データを反復処理し、C#IO関数を使用して出力データを書き込みます。