如何将 16 位深度的图像转换为 8 位深度
How can I convert an image with 16 bit depth to 8 bit depth
具体来说,我正在处理具有 16 位像素值的灰度图像矩阵。我试图将其编码为 PNG 图像,但编码器只接受 8 位深度的像素值。
假定您处理的是无符号数,灰度图像的强度值范围为 0 到 65,535 (2^16 - 1)。要将其转换为 8 位值,范围为 0-255 (2^8 - 1)。所以你想保留每个数字的最高 8 位(最左边的 8 位)。您可以将每个数字除以 2^8 并对结果进行四舍五入,或者将数字向右移动 8 位。每右移n位相当于将十进制数除以2^n并对结果进行取整
int rows;
int cols;
unsigned int* image;
unsigned char*downConvertImage(unsigned int* img, int rows, int cols) {
unsigned char* out = new unsigned char[rows*cols];
for (int i = 0; i < rows*cols - 1; i++)
out[i] = (unsigned char*) image[i]/256;
return out;
}
具体来说,我正在处理具有 16 位像素值的灰度图像矩阵。我试图将其编码为 PNG 图像,但编码器只接受 8 位深度的像素值。
假定您处理的是无符号数,灰度图像的强度值范围为 0 到 65,535 (2^16 - 1)。要将其转换为 8 位值,范围为 0-255 (2^8 - 1)。所以你想保留每个数字的最高 8 位(最左边的 8 位)。您可以将每个数字除以 2^8 并对结果进行四舍五入,或者将数字向右移动 8 位。每右移n位相当于将十进制数除以2^n并对结果进行取整
int rows;
int cols;
unsigned int* image;
unsigned char*downConvertImage(unsigned int* img, int rows, int cols) {
unsigned char* out = new unsigned char[rows*cols];
for (int i = 0; i < rows*cols - 1; i++)
out[i] = (unsigned char*) image[i]/256;
return out;
}