【问题标题】:Converting a Bitmap image to a matrix将位图图像转换为矩阵
【发布时间】:2012-11-20 20:28:16
【问题描述】:

在 C# 中,我需要将已经转换为位图的图像转换为由位图数据的 uint8 组成的图像宽度和高度大小的矩阵。换句话说,将位图数据放在矩阵中并将它们转换为 uint8,这样我就可以在矩阵的行和列上进行我打算做的计算。

【问题讨论】:

    标签: c# matrix bitmap


    【解决方案1】:

    试试这样的:

    public Color[][] GetBitMapColorMatrix(string bitmapFilePath)
    {
        bitmapFilePath = @"C:\9673780.jpg";
        Bitmap b1 = new Bitmap(bitmapFilePath);
    
        int hight = b1.Height;
        int width = b1.Width;
    
        Color[][] colorMatrix = new Color[width][];
        for (int i = 0; i < width; i++)
        {
            colorMatrix[i] = new Color[hight];
            for (int j = 0; j < hight; j++)
            {
                colorMatrix[i][j] = b1.GetPixel(i, j);
            }
        }
        return colorMatrix;
    }
    

    【讨论】:

    • 我试一试。我已经将我的图像转换为灰度,这很容易。您确定这会处理位图的标题吗?我的矩阵必须是纯值,不包括位图的标题。
    • 如果你想让它慢一点,你可以使用GetPixel。如果图像不是,则必须使用Bitmap.Lockbits(),然后直接访问底层数据。根据图像的大小,使用专门的库(AForge.Net、Streamwave、OpenCV、IPP ...)也可能有意义
    • +1。虽然它很慢(正如@igrimpe 指出的那样),但代码的重要质量是正确的(忽略随机路径分配)。
    • 不幸的是 b1.GetPixle(i,j) 不起作用,因为我的图像已经是位图格式和灰度。它不能将颜色转换为位图格式。
    • 在这种情况下显示您的代码部分,您在其中创建灰度位图。我仍然建议结帐Bitmap.Lockbits,因为它不仅更快,而且还给你byte(正如你在问题中所说)而不是color
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多