2017-09-03 183 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以上的任何像素都将显示为白色。因此你有一个白色的屏幕。 –