gpt4 book ai didi

c - 从 C 中的原始图像获取每个像素的 RGB 值

转载 作者:太空狗 更新时间:2023-10-29 14:53:03 25 4
gpt4 key购买 nike

我想从原始图像中读取每个像素的 RGB 值。有人可以告诉我如何实现这一目标吗?感谢您的帮助!

我的原始图像格式是 .CR2,来自相机。

最佳答案

假设图像是 w * h 像素,并以没有 alpha 分量的真正“打包”RGB 格式存储,每个像素将需要三个字节。

在内存中,图像的第一行可能会以这样的 ASCII 图形表示:

   R0 G0 B0 R1 G1 B1 R2 G2 B2 ... R(w-1) G(w-1) B(w-1)

这里,每个 Rn Gn 和 Bn 代表一个字节,给出像素 <该扫描线的 em>n。请注意,不同“原始”格式的字节顺序可能不同;没有商定的世界标准。无论出于何种原因,不同的环境(显卡、相机...)都会以不同的方式执行此操作,您只需要了解布局即可。

读出一个像素可以通过这个函数来完成:

typedef unsigned char byte;
void get_pixel(const byte *image, unsigned int w,
unsigned int x,
unsigned int y,
byte *red, byte *green, byte *blue)
{
/* Compute pointer to first (red) byte of the desired pixel. */
const byte * pixel = image + w * y * 3 + 3 * x;
/* Copy R, G and B to outputs. */
*red = pixel[0];
*green = pixel[1];
*blue = pixel[2];
}

注意图像的高度如何不需要它来工作,以及该函数如何免于边界检查。生产质量的功能可能更具装甲。

更新 如果您担心这种方法太慢,您当然可以只遍历像素,而不是:

unsigned int x, y;
const byte *pixel = /* ... assumed to be pointing at the data as per above */

for(y = 0; y < h; ++y)
{
for(x = 0; x < w; ++x, pixel += 3)
{
const byte red = pixel[0], green = pixel[1], blue = pixel[2];

/* Do something with the current pixel. */
}
}

关于c - 从 C 中的原始图像获取每个像素的 RGB 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1536159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com