我需要将 .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/