如何在Opencv中显示Mat

tqj*_*stc 4 c++ opencv

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

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

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

ps:谢谢你的回复.我将发布一些代码和数字以显示更多详细信息:代码:

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;
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

放大150%之后:

在此输入图像描述

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

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

Bul*_*ull 18

如果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);
Run Code Online (Sandbox Code Playgroud)

  • 只是想知道为什么投反对票:这种方式对我来说非常有效。 (2认同)