Matlab rgb2hsv() 给 uint8s?

Matlab rgb2hsv() to give uint8s?

我是 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

有什么方法可以将其转换为 uint8 矩阵而不是双精度矩阵?

要将结果转换回 uint8,只需使用 hsv = im2uint8(rgb2hsv(im))。它不仅进行数据类型转换,还将图像缩放到 uint8 的 0...255 范围。

以双精度格式存储图像时,仅使用范围 0...1,而以任何整数(或定点)格式存储图像时,将使用 intmin 和 [=12 之间的完整范围=]被使用。要将图像转换回原始范围,您必须使用 im2uint8 或手动执行,首先乘以 255,然后转换数据类型。我更喜欢 im2uint8 因为它更健壮,例如im2uint8(im2uint8(I)) returns 一张有效的图片。前面的内容适用于我知道的所有颜色空间,除了 HDR 图像。

我知道文档说它仅适用于灰度和 rgb 图像,但它基本上是一种具有自动重新缩放的数据类型转换。