【问题标题】:Write pixels image in a CSV file将像素图像写入 CSV 文件
【发布时间】:2018-03-05 22:52:29
【问题描述】:

我正在学习图像处理,但我被困住了。我想读取图像并将字节写入 CSV 文件,以; 分隔。我将图像转换为字节数组,然后将其写入。但似乎该数组不包含导致file.WriteLine() 错误的所有图像信息。

这是C#中的代码:

// Creación del objeto imagen
Image image = Image.FromFile(@"D:/Users/Sean Sabe/Documents/ImageProcessing/Images/cato.jpg");

// Mostrar datos de la imagen
Console.WriteLine("Image Size: " + image.PhysicalDimension + " Depth: " + image.PixelFormat);

// Convertir la imagen en array de bytes
ImageConverter converter = new ImageConverter();
byte[] bytes = (byte[])converter.ConvertTo(image, typeof(byte[]));

// Escribir la matriz con los bytes
using (StreamWriter file = new StreamWriter(@"D:/Users/Sean Sabe/Documents/ImageProcessing/cato.csv"))
{
    for(int y = 0; y < image.Height; y++)
    {
        for(int x = 0; x < image.Width; x++)
        {
            file.WriteLine(String.Join(";", bytes[x + (y * image.Width)]));
        }
        file.WriteLine("\n");
    }
}

cato.csv 中写的内容如下:

255
216
255
224
0
16
74
.
.
.

以此类推,直到 A 列中的 37132 行。

【问题讨论】:

  • 此外,您似乎假设一个字节等于一个像素。在你修复你的 file.WriteLine/String.Join 问题后,它会在你背后咬你...
  • String.Join() 用于创建具有任意数量值的字符串,但您一次只写一个。我只能猜测你想在那里做什么。为什么不显示它写入文件的内容并解释似乎缺少哪些信息?
  • 据我所知,转换为字节数组的图像不等于图像的像素内容...您需要为此使用LockBitsMarshal.Copy。根据格式,您最终会得到每个像素最多四个字节和填充。仅仅那个字节数组不足以重建图像。有一个原因图像有标题。
  • @JonathanWood 我编辑了这个问题。我想在CSV 文件中写入的是完整的颜色代码,无论图像是RGB 还是灰度。
  • @Nyerguds 如果我想为其他处理操作图像信息,我需要颜色数据而不是图像的字节数?

标签: c# arrays csv image-processing byte


【解决方案1】:

一种缓慢但简单有效的方法是使用 Bitmap 而不是 Image(因为您仍然使用 .jpg 位图):

Bitmap image = Image.FromFile(@"D:/Users/Sean Sabe/Documents/ImageProcessing/Images/cato.jpg") as Bitmap;

现在您可以使用

获取图像每个像素的颜色
Color c = image.GetPixel(x, y);

之后,您可以将颜色的 R、G 和 B 值写入 CSV 文件。

【讨论】:

  • 所以字节不包含颜色信息,对吗?
  • 我想这就是我需要的。但如果是灰度图像会怎样?
  • 字节确实包含颜色信息。但是,信息可能以不同的方式组织,具体取决于图像格式和其他选项,如果您仍想使用它们,则需要解析图像标题并遍历数据表示的所有来龙去脉。这在技术上是可行的,但相当复杂。
  • 灰色是一种颜色。这意味着当您请求像素颜色时,它会返回代表相应灰色阴影的颜色。
  • 感谢您的回答,我设法解决了我需要的问题。我现在清楚了。从位图开始,我在 CSV 中分别为 RGB 编写像素。现在我可以读取每个 .csv 文件并使用 Color.FromArgb 显示完整图像。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 2023-03-27
  • 2023-03-07
相关资源
最近更新 更多