類似於以下使用Emgu OpenCV for .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
來自ImageMagick,來自netpbm的pnmoraw
,正如您鏈接的URL中所提及的那樣,示例代碼片段convert lib/dragon_face.xbm pbm: | pnmnoraw
。
- 使用PIL(Python的圖像庫)通過圖像數據和Python的IO函數來迭代將輸出寫入數據
- 使用System.Drawing.Bitmap特別與getPixel方法通過圖像數據進行迭代,和C#IO函數寫入的輸出數據。
我認爲你需要更清楚地解釋一下你的需求,或許有一個輸入和輸出的例子。你想要多少灰度值?你的原始圖像是黑白還是彩色?之類的東西。否則我認爲你的獎金可能會被浪費。 – 2012-03-25 11:18:35
好的,我會更新問題 – Alaa 2012-03-25 15:33:43