1

我試圖在捕獲的圖像中編寫一個灰度對象作爲代表對象像素塊(或類似對象樣式縮放比例)的0 1矩陣,我可以通過根據顏色的等級循環的對象,縮放和寫入矩陣,但是 我正在尋找智能或開源工具,將灰度圖像中的對象編寫爲零數組[

.NET是優選的,

[更新想象的人工處理,更詳細地解釋]

原始圖像是彩色的,但是,我正在轉換它變成了256灰度,然後我想將它縮放到黑色或白色,所以在一天結束時它只是一張黑白圖片,我想將它轉換爲零一個矩陣,

以下url包含如何使用軟件黑白圖片轉換爲0-1矩陣稱爲ImageMagick的討論:

http://studio.imagemagick.org/discourse-server/viewtopic.php?f=1&t=18433

通知其表現出龍的面部圖像的零一個矩陣!沒有任何技術或開放源碼工具幫助我實現這一目標?

+1

我認爲你需要更清楚地解釋一下你的需求,或許有一個輸入和輸出的例子。你想要多少灰度值?你的原始圖像是黑白還是彩色?之類的東西。否則我認爲你的獎金可能會被浪費。 – 2012-03-25 11:18:35

+0

好的,我會更新問題 – Alaa 2012-03-25 15:33:43

回答

3

類似於以下使用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函數寫入的輸出數據。
+0

非常感謝,Emgu OpenCV非常好!我會試一試,你知道其他類似的庫或工具對我來說可能有用嗎? – Alaa 2012-03-27 18:40:26