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