首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将灰度图像中的对象编写为0-1 array[]

将灰度图像中的对象编写为0-1 array[]
EN

Stack Overflow用户
提问于 2012-03-21 05:33:08
回答 1查看 452关注 0票数 1

我试图在捕获的图像中将灰度对象编写为0-1矩阵,表示对象像素块(或类似对象样式缩放),我可以想象手动处理的过程,通过循环对象,根据颜色的等级缩放和写入矩阵,然而我正在寻找智能或开源工具,

.NET是首选,

更新,以更详细地解释

原始图像是彩色的,但是,我将其转换为256灰度,然后我想将其缩放为黑色或白色,所以最终它只是一张黑白图片,我想将其转换为0-1矩阵,

下面的网址讨论了如何使用一个名为imagemagick的软件将黑白图片转换为0-1矩阵:

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

请注意演示龙脸图像的Zero one矩阵!有什么技术或开源工具可以帮助我实现这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-26 03:51:26

在.NET上使用Emgu OpenCV会像下面这样工作。

代码语言:javascript
运行
复制
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方法来使用Otsu的阈值处理,方法如下:

代码语言:javascript
运行
复制
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);    

其他可能的工具包括

来自ImageMagick的

  • convert和来自netpbm的pnmoraw,如您链接的网址中所述,使用示例代码片段convert lib/dragon_face.xbm pbm: | pnmnoraw.
  • Using PIL (Python图像库)迭代图像数据,使用Python IO函数写入输出数据
  • 使用System.Drawing.Bitmap特别是GetPixel方法迭代图像数据,并使用C# IO函数写入输出数据。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9795314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档