我是Matlab的新手,我正在尝试获取图像的HSV值,但我需要将结果作为uint8。目前,当我读入图像时,我收到了以下矩阵:
whos im
Name Size Bytes Class Attributes
im 120x100x3 36000 uint8
当我使用函数rgb2hsv()时,我得到:
hsv = rgb2hsv(im);
whos hsv
Name Size Bytes Class Attributes
hsv 120x100x3 288000 double
有没有办法将其转换为uint8s的矩阵而不是双打?
答案 0 :(得分:2)
要将结果转换回uint8,只需使用hsv = im2uint8(rgb2hsv(im))
即可。它不仅可以进行数据类型转换,还可以将图像缩放到uint8的0 ... 255范围。
以双重格式存储图像时,仅使用范围0 ... 1,同时以任何整数(或固定点)格式存储图像,intmin
和intmax
之间的整个范围用来。要将图像转换回原始范围,您必须使用im2uint8
或手动执行,首先乘以255然后转换数据类型。我更喜欢im2uint8
因为它更强大,例如im2uint8(im2uint8(I))
会返回有效图片。除了HDR图像之外,我所知道的所有色彩空间都适用。
我知道文档说它只适用于灰度和rgb图像,但它基本上是一种带有自动重新缩放的数据类型转换。