对于存储图像的垫子,很容易使用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;
输出:
放大150%之后
:
然后在我放大150%之后,我们可以看到'测试'是完全白色的,我们看不到它的元素值。 ' TEST1'是完全黑的,我们仍然看不到它的元素值。但是对于' test2',它是灰色的,我们可以看到它的元素值是200.
此实验是否意味着imshow()
只能显示CV_8UC1
而我们无法显示任何其他数据?
答案 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);