阅读 72

uint8_t是什么数据类型,opencv图像处理

最近,在将某个图像的二维亮度矩阵变换为伪彩色图表时,发现使用im2uint8函数和uint8函数出现的情况不同,开始寻找问题的所在。

我使用的亮度矩阵是双精度型,实际转换为uint8型时用imshow函数显示。

如果使用原始数据显示伪彩色图表或双精度类型,结果会产生很多噪声,某些过滤器无法消除!

一般来说,应该使用im2uint8函数进行转换,但是发现完全不能使用使用im2uint8函数转换后的图像,最后尝试使用uint8函数进行转换时,为什么图像显示得很好呢?

如果继续搜索,则在使用im2uint8函数转换双精度数据时有一个前提条件。 这意味着双精度数据类型必须在0到1之间。 im2uint8函数将其归一化为0到255之间的所有数据,但如果原始双精度数据包含不在0到1之间的数据,则会发生溢出。 例如,10

正好我使用的双精度型亮度矩阵正好不在0~1之间,所以使用imuint8函数的话,本来需要显示的图像部分会全部溢出,也就是255(uint8),所以做好的图像不能使用!

那么,问题又来了吗? 为什么使用uint8函数可以很好地显示呢?

看用uint8函数变换后的亮度矩阵,首先数据类型从double变换为uint8型,但是具体的数值使用四舍五入法变换为整数,例如11.2(double )为11 ) uint ),0.45 ) double

我使用的亮度矩阵有噪声是因为产生了很多小数的亮度值。 真正应该显示的部分是1以上的数值,正好这些小数都被转换成了0。 所以显示的伪彩色图可以正常使用!


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐