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 图像,但它基本上是一种具有自动重新缩放的数据类型转换。
我是 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 图像,但它基本上是一种具有自动重新缩放的数据类型转换。