C ++从Image中读取信息

时间:2013-03-22 22:57:50

标签: c++ image binary

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

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

然而,当我尝试使用给定图像的这种方法并在读入信息时尝试引用内容时,所有打印出的内容都是:

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

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

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

这是一个decent tutorial on C++ file handling。请务必阅读名为二进制文件的部分。

答案 1 :(得分: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 can be found here的功能的完整参考。

相关问题