如何在Opencv中显示Mat

时间:2014-07-31 23:40:52

标签: c++ opencv

对于存储图像的垫子,很容易使用imshow显示它。但如果Mat的数据类型是CV_32FC1,我该如何显示这个垫子?

我试过imshow,但显示图是全白的,当我缩放时,它仍然是完全空白的,我看不到垫子中的浮点数。

有谁知道如何显示整个mat矩阵?

p.s:感谢您的回复。我会发布一些代码和数据来显示更多细节: 代码:

Mat mat1;
mat1 = Mat::ones(3,4,CV_32FC1);
mat1 = mat1 * 200;
imshow("test", mat1);
waitKey(0);

Mat dst;
normalize(mat1, dst, 0, 1, NORM_MINMAX);
imshow("test1", dst);
waitKey(0);

mat1.convertTo(dst, CV_8UC1);
imshow("test2", dst);
waitKey(0);

return 0;

输出:

enter image description here

放大150%之后

enter image description here

然后在我放大150%之后,我们可以看到'测试'是完全白色的,我们看不到它的元素值。 ' TEST1'是完全黑的,我们仍然看不到它的元素值。但是对于' test2',它是灰色的,我们可以看到它的元素值是200.

此实验是否意味着imshow()只能显示CV_8UC1而我们无法显示任何其他数据?

1 个答案:

答案 0 :(得分:16)

如果image是类型为CV_32F的Mat,如果图像是32位浮点,则imshow()将像素值乘以255 - 即值范围[0,1]映射到[0,255]。 因此,您的浮点图像必须具有范围0 .. 1。

这将显示CV32F图像,无论范围是什么:

        cv::Mat dst
        cv::normalize(image, dst, 0, 1, cv::NORM_MINMAX);
        cv::imshow("test", dst);
        cv::waitKey(0);