Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image Matlab rgb2hsv()给出uint8s?_Image_Matlab_Image Processing_Rgb_Hsv - Fatal编程技术网

Image Matlab rgb2hsv()给出uint8s?

Image Matlab rgb2hsv()给出uint8s?,image,matlab,image-processing,rgb,hsv,Image,Matlab,Image Processing,Rgb,Hsv,我对使用Matlab是新手,我正在尝试获取图像的HSV值,但我需要的结果是uint8。目前,当我读入图像时,我收到以下矩阵: whos im Name Size Bytes Class Attributes im 120x100x3 36000 uint8 当我使用函数rgb2hsv()时,我得到: 有没有办法将其转换为uint8矩阵而不是双精度矩阵?要将结果转换回uint8,只需使用hsv=im

我对使用Matlab是新手,我正在尝试获取图像的HSV值,但我需要的结果是uint8。目前,当我读入图像时,我收到以下矩阵:

whos im
Name        Size               Bytes  Class    Attributes

im        120x100x3            36000  uint8    
当我使用函数rgb2hsv()时,我得到:


有没有办法将其转换为uint8矩阵而不是双精度矩阵?

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

以双格式存储图像时,仅使用范围0…1,而以任何整数(或定点)格式存储图像时,使用
intmin
intmax
之间的完整范围。要将图像转换回原始范围,必须使用
im2uint8
或手动执行,首先乘以255,然后转换数据类型。我更喜欢
im2uint8
,因为它更健壮,例如
im2uint8(im2uint8(I))
返回有效图像。除了HDR图像,我所知道的所有颜色空间都是如此


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

缩放
hsv
值是否安全?他们的“行为”像RGB值吗?@Shai:是的,补充了一些解释。显然,您会遇到一些量化错误,但与RGB没有什么不同。转换为
uint8
会产生意外的副作用。如果转换为
uint8
,将失去精度。通常,色调表示为0到360之间的角度度量,而饱和度和值表示为0到100或0到1之间的浮点值。转换应该为您提供浮点值。让我问你一个问题:为什么要将结果转换为
uint8
?我需要使用这些值作为单独矩阵的索引。如果我失去了一点精度,没关系。你介意解释一下你使用HSV变换作为索引的最终应用是什么吗?它可能提供一些进一步的见解,如果适用的话,我可以对另一种方法进行评论。好的,这更有意义。因此,HSV变换的量化似乎是合理的。非常感谢。Good luck.FYI,
hsv
是内置彩色地图的名称。如果使用该配色方案,您可能不想覆盖它。
hsv = rgb2hsv(im);
whos hsv
Name        Size                Bytes  Class     Attributes

hsv       120x100x3            288000  double