2014-02-25 84 views
2

我正在嘗試使用opencv 2.4.3讀取16位顏色TIF。問題是我無法得到任何令人滿意的東西。我所得到的是一連串的黑色和灰色線條。使用opencv讀取16位tif

What I get, instead of a satellite image of Vancouver...

我嘗試了多種不同的方式來讀取圖像:

cv::Mat cvimage = cv::imread(imageFile, CV_LOAD_IMAGE_COLOR | CV_LOAD_IMAGE_ANYDEPTH); 
cv::Mat cvimage = cv::imread(imageFile, CV_LOAD_IMAGE_UNCHANGED); 

cv::imshow("image", cvimage); 

cvimage的typeCV_16UC3,符合市場預期。

什麼是使用opencv讀取16位圖像的正確方法?

+0

你能分享原始圖像嗎? – herohuyongtao

+0

@herohuyongtao不幸的是,我不能,這是一個許可的圖像,無論如何它是1.5 GB。 – undu

回答

2

嘗試:

cv::Mat cvimage = cv::imread(imageFile 
          , CV_LOAD_IMAGE_ANYCOLOR | CV_LOAD_IMAGE_ANYDEPTH); 

如果這不起作用,你可以先將其轉換爲PNG爲OpenCV的可以讀取和寫入甚至16位的PNG文件正確。您可以將TIFF轉換爲PNG而不會丟失。

cv::Mat cvimage = cv::imread(imageFile, -1); 
+0

我也試過這個,但結果相同。我寧願沒有我的用戶轉換他們的圖像。不過謝謝你的幫助。 – undu

+0

你找到了這個答案嗎? – curio1729

+1

@kishensurajP那是三年前的事!無論如何,如果我沒有記錯的話,我使用GDAL來讀取tif並從中創建cv :: Mat(我認爲您可以重新使用緩衝區,不需要進行昂貴的複製)。我希望它有幫助! – undu