我正在尝试读取TIFF图像以执行处理。理想的情况是能够在OpenCV结构中导入此图像,但即使以不同的方式访问它也会很棒。
如果我在图像上运行tiffinfo
TIFF Directory at offset 0x2bb00 (178944)
Subfile Type: (0 = 0x0)
Image Width: 208 Image Length: 213
Resolution: 1, 1
Bits/Sample: 32
Sample Format: IEEE floating point
Compression Scheme: None
Photometric Interpretation: min-is-black
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 1
Rows/Strip: 1
Planar Configuration: single image plane
我想访问单个像素值。图像为灰度,其中包含的数据范围为0.0至10372.471680。
我使用LibTIFF,Magick ++进行了一些试验但是无法访问单个像素值(我尝试在像素上进行循环并在屏幕上打印这些值)。
这是我尝试使用的一段代码,我从一个在线示例中得到了它:
#include "tiffio.h"
#include "stdio.h"
int main()
{
TIFF* tif = TIFFOpen("test.tif", "r");
if (tif) {
uint32 imagelength;
tsize_t scanline;
tdata_t buf;
uint32 row;
uint32 col;
TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &imagelength);
scanline = TIFFScanlineSize(tif);
buf = _TIFFmalloc(scanline);
for (row = 0; row < imagelength; row++)
{
int n = TIFFReadScanline(tif, buf, row, 0);
if(n==-1){
printf("Error");
return 0;
}
for (col = 0; col < scanline; col++)
printf("%f\n", buf[col]);
printf("\n");
}
printf("ScanLineSize: %d\n",scanline);
_TIFFfree(buf);
TIFFClose(tif);
}
}
我用
编译它gcc test.c -ltiff -o test
当我运行它时,我得到了
test.c: In function ‘main’:
test.c:24: warning: dereferencing ‘void *’ pointer
test.c:24: error: invalid use of void expression
任何提示?谢谢你的时间。
答案 0 :(得分:1)
查看函数_TIFFmalloc()的文档。如果它像标准malloc一样工作,它返回一个void指针,如果第24行中的buf [col]语句可以正常工作,则需要将其转换为特定类型。
答案 1 :(得分:-1)
你必须解决这个问题:
tdata_t *buf;
buf =(tdata_t*) _TIFFmalloc(scanline);