2013-03-22 231 views
-1

我必須從圖像中讀取一些信息。當我拖動圖像的.tif到Visual C++ 2006年,它顯示了這樣的: enter image description here 我想在最低和時間上的圖像的右側指定的最大值閱讀(以黃色突出顯示)。我怎樣才能做到這一點?從文件中讀取數據時,我通常會做這樣的事情:C++從圖像中讀取信息

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

然而,當我試圖與給定圖像這一做法,並作爲信息被讀入作爲稍後再試couting的內容,全部是打印出來的是:

contains = MM 
contains = 
contains = 

顯然,它不工作。它只讀入一次信息,並在3次迭代後停止讀取。

所以,我怎麼能去獲得從圖像中最大值和最小值?

謝謝!

+8

提示:不要將二進制文件作爲文本文件打開。 – deepmax 2013-03-22 22:59:16

+1

另外,圖像的「最大值和最小值」是什麼? – 2013-03-22 22:59:46

+0

您需要先將圖像轉換爲.bmp或其他反映各像素值的其他格式。熟悉圖像文件格式......並識別TEXT和BINARY文件之間的區別。 – Floris 2013-03-22 23:01:20

回答

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

+0

有人向你投了你的問題,但沒有禮貌發表評論。 * tiff *文件通常是二進制文件,所以雖然你的'fscanf()'建議對*文本*文件是正確的,但它對於圖像來說效果不好。我相信反對票是因爲你錯過了更大的問題。 – 2013-03-24 17:15:45

1

你的示例代碼適用於讀取文本文件,但你的TIFF文件(大部分)的二進制文件。所以你要做的第一件事就是以二進制方式打開該文件。

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

<<-style提取器適用於格式化文本,但不適合二進制文件。

你需要知道的關於文件格式找出該文件中找到你後的值。我不知道關於TIFF的細節,所以你必須找到一個參考。它可能涉及在標題(例如fileStream.read(buffer, size))中讀取,在標題中查找偏移量,移動到文件中的該位置(例如,filestream.seekg(offset, ios::beg)),然後解釋該位置處的字節。

這裏有一個decent tutorial on C++ file handling。請確保您閱讀了稱爲二進制文件的部分。