-1

我必须从图像中读取一些信息。当我将 .tif 图像拖到 Visual C++ 2006 中时,它显示如下: 在此处输入图像描述 我正在尝试读取时间图像右侧指定的最小值和最大值(以黄色突出显示)。我怎样才能做到这一点?从文件中读取时,我通常会这样做:

ifstream fileStream(file_name); 
string contents;
while(fileStream >> contents) //do something
fileStream.close();

但是,当我用给定的图像尝试这种方法并在读入信息后立即尝试计算内容时,打印出来的只是:

contains = MM 
contains =
contains =

显然,它不起作用。它只读取一次信息,并在 3 次迭代后停止读取。

那么,我怎样才能从图像中获取最大值和最小值呢?

谢谢!

4

2 回答 2

1

您的示例代码适用于读取文本文件,但您的 TIFF 文件(大部分)是二进制文件。所以你要做的第一件事是以二进制模式打开文件。

std::ifstream fileStream(file_name, std::ios::binary);

-style 提取器<<适用于格式化文本,但不适用于二进制文件。

您需要了解文件格式才能确定文件中的哪个位置可以找到您所追求的值。我不知道有关 TIFF 的详细信息,因此您必须找到参考。它可能涉及读取头文件(例如,fileStream.read(buffer, size)),查找头文件中的偏移量,移动到文件中的那个位置(例如,filestream.seekg(offset, ios::beg)),然后解释那个位置的字节。

这是一个关于 C++ 文件处理的不错的教程。确保您阅读了名为Binary Files的部分。

于 2013-03-22T23:59:26.733 回答
0

尝试使用fscanf().

#include <cstdio>

FILE * file = fopen("filename.tiff","r");

char c;
fscanf(file,"%c",&c);

这将从文件中读取一个字节。通过这种方式反复调用fscanf(),可以读取文件,在min的情况下查找字节'm'、'i'和'n'。一旦你找到了这个,你就可以使用

int num;
fscanf(file,"%d",&num);

读取下一次出现的文本数字(以 ASCII 或其他编码而不是二进制形式编写的数值。

可以在此处找到有关 fscanf 功能的完整参考。

于 2013-03-22T23:15:53.637 回答