c - 如何将灰度图像导入 C 中的二维矩阵?

标签 c image-processing matrix bmp grayscale

我需要将 .bmp 灰度图像读入 2D 矩阵。矩阵上的值 (int) 将是图像上相应的灰度级别(从 0 到 255)。

更具体地说,假设我有一个 4x4 像素的 8 位灰度图像。

我想将其转换为二维矩阵,其值将是灰度级别,例如:

|0......2......4.......5 |

|10....11....12....10|

|210..200..150..98|

|1.....10....50.....88|

到目前为止,我已经成功将灰度图像导入到 3 矩阵(RGB)中,但是当我尝试使用转换因子将其转换为单个矩阵(灰度)时,它不起作用。图像变得与原始图像不同。

我使用的转换函数是: ...

for (int i = 0; i < l; i++) 
    for (int j = 0; j < c; j++) 
    { 
     b[i][j] = (int)(0.11*b[i][j] + 0.59*g[i][j] + 0.3*r[i][j]);
     g[i][j] = b[i][j];
     r[i][j] = g [i][j]; 
    } 
}

最佳答案

问题可能是由于char类型上的符号扩展造成的。如果将每个字节转换为 unsigned char 它应该可以工作。

b[i][j] = (int)(0.11*(unsigned char)b[i][j] + 0.59*(unsigned char)g[i][j] + 0.3*(unsigned char)r[i][j]);

编辑:刚刚注意到值已经是int,因此符号扩展已经发生。在这种情况下,只需将其屏蔽即可。

b[i][j] = (int)(0.11*(0xff&b[i][j]) + 0.59*(0xff&g[i][j]) + 0.3*(0xff&r[i][j]));

关于c - 如何将灰度图像导入 C 中的二维矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29675091/

相关文章:

c - 处理用户输入中的 EOF

C:执行手动映射的文本段,无需编写太多程序集

r - R 中是否有一种有效的方法将矩阵 M2 的每一行 "paste"到矩阵 M1 的每一行以获得所有可能的组合?

image-processing - 在FFmpeg中使用mininterpolate来减少模糊帧是否很好

r - data.frame、tibble 和 matrix 之间有什么区别?

javascript 矩阵操作不起作用

c - Linux中的itoa函数在哪里?

iphone - 获取 long long integer 的 abs 值

java - OpenCV Java 中的灰度反转图像

c++ - FindContours 如何循环遍历图像? OpenCV 2.3