【问题标题】:Converting 2D array into a greyscale image in C在C中将二维数组转换为灰度图像
【发布时间】:2020-02-20 23:00:54
【问题描述】:

我使用头文件(LenaArray.h); int lena [511][511] = {162,162,162,etc...},导入了Lena的二维数组

但现在我想将其转换为灰度图像,我不知道如何请帮忙? Image of Lena I'm trying to print

#include <stdio.h>
#include "LenaArray.h" 

int main () {

int i,j;

int width = 511; 
int height = 511;

for (i = 0; i < height; i ++ )
{
    for(j = 0; j < width; j ++)
    {
        printf("%d",&lena[i][j]);
    }

}


}

【问题讨论】:

  • 我不确定i ++j ++ 是否符合标准。我认为不是。
  • ++s 没有错。一个主要问题是您的 printf 中的“&”。您不想打印数组值的地址,而是想打印实际值。此外,您需要知道该值代表什么。它是否以某种方式对 RGB 值进行编码?它是调色板的索引吗?在我看来它已经是灰度的了。那么你想做什么——在屏幕或打印机上渲染实际图像?为此,您需要某种图形库。
  • 这可能是初学者最简单的方法了...stackoverflow.com/a/22580958/283662
  • 您还没有解释数组的格式。红色、绿色和蓝色分量是如何存储的?主要技术是使用关系float Gray = 0.2989f*Red + 0.5870f * Green + 0.1140f * Blue。这当然会产生 Gray 作为与组件相同比例的浮点数。大多数情况下,您需要将Gray 舍入到最接近的整数以创建结果图像。类似于(int)(Gray + 0.5)

标签: c arrays image


【解决方案1】:
#include <stdio.h>

typedef unsigned char U8;
typedef struct { U8 p[4]; } color;


U8 lena[511][511];

void save(char* file_name,int width,int height)
{

    FILE* f = fopen(file_name, "wb");


    color tablo_color[256];
    for (int i = 0; i < 256; i++)
        tablo_color[i] = { (U8)i,(U8)i,(U8)i,(U8)255 };//BGRA 32 bit


    U8 pp[54] = { 'B', 'M', 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0 ,
                     40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 32 };
    *(int*)(pp + 2) = 54 + 4 * width * height;  //file size
    *(int*)(pp + 18) = width;
    *(int*)(pp + 22) = height;
    *(int*)(pp + 42) = height * width * 4;      //bitmap size
    fwrite(pp, 1, 54, f);


    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            U8 indis = lena[i][j];
            fwrite(tablo_color+indis,4,1,f);
        }
    }

    fclose(f);

}

int main()
{

    for (int i = 0; i < 511; i++)
    {
        for (int j = 0; j < 511; j++)
        {
            lena[i][j]=i+j;
        }
    }

    save("test.bmp", 511, 511);

}

【讨论】:

    猜你喜欢
    • 2014-11-21
    • 2013-06-21
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 2015-12-07
    相关资源
    最近更新 更多