R语言
rgb2hsv
位于 grDevices
包(package)。 说明
rgb2hsv
将颜色从 RGB 空间(红/绿/蓝)转换为 HSV 空间(色调/饱和度/值)。
用法
rgb2hsv(r, g = NULL, b = NULL, maxColorValue = 255)
参数
r |
|
g |
‘green’ 值的向量,或 |
b |
‘blue’ 值的向量,或 |
maxColorValue |
给出 RGB 颜色值范围最大值的数字。默认 |
细节
值(亮度)给出颜色中的光量。
色调说明了主波长。
饱和度是混合到颜色中的色相量。
HSV 颜色空间是相对于 RGB 颜色空间而言的,R是 sRGB,它具有隐式伽玛校正。
值
每种颜色都有一列的矩阵。矩阵的三行表示色调、饱和度和明度,并相应地命名为"h"
、"s"
和"v"
。
例子
## These (saturated, bright ones) only differ by hue
(rc <- col2rgb(c("red", "yellow","green","cyan", "blue", "magenta")))
(hc <- rgb2hsv(rc))
6 * hc["h",] # the hues are equispaced
(rgb3 <- floor(256 * matrix(stats::runif(3*12), 3, 12)))
(hsv3 <- rgb2hsv(rgb3))
## Consistency :
stopifnot(rgb3 == col2rgb(hsv(h = hsv3[1,], s = hsv3[2,], v = hsv3[3,])),
all.equal(hsv3, rgb2hsv(rgb3/255, maxColorValue = 1)))
## A (simplified) pure R version -- originally by Wolfram Fischer --
## showing the exact algorithm:
rgb2hsvR <- function(rgb, gamma = 1, maxColorValue = 255)
{
if(!is.numeric(rgb)) stop("rgb matrix must be numeric")
d <- dim(rgb)
if(d[1] != 3) stop("rgb matrix must have 3 rows")
n <- d[2]
if(n == 0) return(cbind(c(h = 1, s = 1, v = 1))[,0])
rgb <- rgb/maxColorValue
if(gamma != 1) rgb <- rgb ^ (1/gamma)
## get the max and min
v <- apply( rgb, 2, max)
s <- apply( rgb, 2, min)
D <- v - s # range
## set hue to zero for undefined values (gray has no hue)
h <- numeric(n)
notgray <- ( s != v )
## blue hue
idx <- (v == rgb[3,] & notgray )
if (any (idx))
h[idx] <- 2/3 + 1/6 * (rgb[1,idx] - rgb[2,idx]) / D[idx]
## green hue
idx <- (v == rgb[2,] & notgray )
if (any (idx))
h[idx] <- 1/3 + 1/6 * (rgb[3,idx] - rgb[1,idx]) / D[idx]
## red hue
idx <- (v == rgb[1,] & notgray )
if (any (idx))
h[idx] <- 1/6 * (rgb[2,idx] - rgb[3,idx]) / D[idx]
## correct for negative red
idx <- (h < 0)
h[idx] <- 1+h[idx]
## set the saturation
s[! notgray] <- 0;
s[notgray] <- 1 - s[notgray] / v[notgray]
rbind( h = h, s = s, v = v )
}
## confirm the equivalence:
all.equal(rgb2hsv (rgb3),
rgb2hsvR(rgb3), tolerance = 1e-14) # TRUE
作者
R interface by Wolfram Fischer wolfram@fischer-zim.ch;
C code mainly by Nicholas Lewin-Koh nikko@hailmail.net.
也可以看看
相关用法
- R rgb RGB 颜色规格
- R recordGraphics 记录图形操作
- R recordPlot 记录和重放绘图
- R axisTicks 计算漂亮的轴刻度
- R hcl HCL 颜色规格
- R quartzFonts 石英字体
- R as.graphicsAnnot 强制图形注释对象
- R xyTable (x,y) 点的重数,例如,对于向日葵图
- R dev.interactive 当前图形设备是否具有交互性?
- R chull 计算一组点的凸包
- R convertColor 在色彩空间之间转换
- R X11Fonts X11 字体
- R plotmath R 中的数学注释
- R dev.capture 将设备输出捕获为光栅图像
- R dev.size 查找设备表面的尺寸
- R pdf.options 设置/查看 pdf 参数默认值的辅助函数
- R densCols 平滑密度图的颜色
- R windows Windows 图形设备
- R check.options 设置带有一致性检查的选项
- R msgWindow 操纵窗口
- R dev.flush 保持或刷新屏幕图形设备上的输出
- R n2mfrow 根据绘图数计算默认“mfrow”
- R dev 控制多个设备
- R hsv HSV 颜色规格
- R postscript PostScript 图形
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 RGB to HSV Conversion。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。