对于存储图像的垫子,很容易使用它来显示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)