gpt4 book ai didi

c - 如何使用 geotiff 解释 geotiff strip 数据

转载 作者:行者123 更新时间:2023-11-30 16:44:34 25 4
gpt4 key购买 nike

我正在编写一个需要读取 4 channel geotiff 图像的代码,在本例中为 16 位图像(数据实际上是 12 位分辨率,但以 16 位编码)。

我的主要目标是读取像素值以便稍后使用它们。来自这个问题"How 16bits-RGBA image pixels are interlaced?"我尝试使用 TIFFReadEncodedStrip 而不是 TIFFRGBAImage,如下所示:

buf = (unsigned char*)(_TIFFmalloc(TIFFStripSize(tif)));
TIFFReadEncodedStrip(tif,strip,buf,(tsize_t)-1);
uint32 *p0 = buf;
printf("strip %d = %d \n", strip, *p0);

对于我打印的 p0 值(应该是实际的图像数据),我得到了:

strip 0 = 20382000

检查我发现的图像中的标签:

Rows per strip: 1  
Samples per pixel: 4
Bits per sample: 16
Image orientation: 1 (bottom left)
Size of buffer: 8 bytes

所以我的假设是我从缓冲区获得的 p0 值是图像第一个 channel 左上角的前四个像素。我不明白的是我该如何解释我得到的 p0 strip 的值。

在 matlab 中打开图像并检查每个 channel 中的第一个像素(左上角),我得到了 304、311、314 和 314,这似乎与我得到的 p0 值无关。

我不知道这是因为 12 位分辨率的原因,还是我必须将其转换为 uint32 以外的类型,但我就是无法理解这个数字。

有人可以帮忙破译这个数字吗?它是否对应于左下角的前四个像素?

最佳答案

我使用以下代码访问了图像中的实际像素值:

TIFFReadEncodedStrip(tif,strip,buf, (tsize_t) -1);  
uint16_t *p16;
p16 = (uint16_t *) buf;
printf("Strip: %d\n", strip);
int i = 0;
for (i; i < 64; i++) { // the strip buffer is *length* elements long
printf("%d: %u\n", i+1, p16[i]);
}

关键是将缓冲区转换为uint16_t*。这将像素值显示为人类可以理解的东西。

关于c - 如何使用 geotiff 解释 geotiff strip 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44421963/

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