2017-09-03 182 views
-1

我有一個int數組在OpenCV中imshow()不適用於cv :: Mat類型CV_32F?

float* data; // stores pixel gray color 
cv::Mat img(h,w,CV_32F,data); 
cv::namedWindow("Display window"); 
cv::imshow("Display window", img); 

那我得到的是:

enter image description here

我搜索了很多資源,但無法找到了。我懷疑這是類型的問題,但我與定義相比,我認爲沒關係。

有誰能告訴我理由?

+0

那你希望它是什麼樣子?什麼顏色是3.40282347E + 38?或-3.40282347E + 38。嘗試將您感興趣的浮動範圍轉換爲8but –

+0

如果類型爲浮動,則值必須介於0和1之間才能正確顯示......您沒有閱讀過文檔嗎? – Miki

+0

像素<= 0呈現爲黑色,像素> = 1呈現爲白色0 <像素<1呈現爲灰色值。所以可能你必須擴大你的形象。嘗試cv :: imshow(「Display window」,img *(1.0/255.0)); – Micka

回答

0

如果你的形象是一個單一的通道之一,那麼你就被轉換爲CV_8U

float* data; // stores pixel gray color 

cv::Mat img(h,w,CV_32F,data), 8u_image; 

img.convertTo(8u_image,CV_8U); 

cv::namedWindow("Display window"); 

cv::imshow("Display window", 8u_image); 
+0

但我的問題是CV_32F也是單通道,爲什麼不能顯示圖像? – Billadsf

+0

255以上的任何像素都將顯示爲白色。因此你有一個白色的屏幕。 –