gpt4 book ai didi

r - 使用 R 从十六进制颜色代码或 RGB 到颜色名称

转载 作者:行者123 更新时间:2023-12-04 02:08:29 26 4
gpt4 key购买 nike

我正在尝试计算给定图片的每种颜色的百分比。在这一步我有这个输出:

       Color Count red green blue
861 ED1B24 16774 237 27 36
1 000000 11600 0 0 0
18 23B14D 5427 35 177 77
1996 FFFFFF 5206 255 255 255
1547 FEF200 3216 254 242 0
862 ED1B26 344 237 27 38

现在我想添加另一列颜色名称,然后计算百分比。我该怎么做?我想我还必须聚合一些颜色。发送

这里讨论上面输出的代码:Image colors composition using R

最佳答案

您可以决定一些距离度量,然后搜索使与每种颜色的距离最小的 R 颜色。这听起来计算量很大,但实际上是瞬时完成的。

例如,使用您提供的数据框:

> col_data
Color Count red green blue
861 ED1B24 16774 237 27 36
1 000000 11600 0 0 0
18 23B14D 5427 35 177 77
1996 FFFFFF 5206 255 255 255
1547 FEF200 3216 254 242 0
862 ED1B26 344 237 27 38

我们可以创建另一个数据框,其中包含 R 中定义的颜色的 RGB 值:

r_colors <- data.frame(color = colors())
r_colors <- cbind(r_colors, t(col2rgb(colors())))

这会创建一个看起来像这样的东西:

> head(r_colors)
color red green blue
1 white 255 255 255
2 aliceblue 240 248 255
3 antiquewhite 250 235 215
4 antiquewhite1 255 239 219
5 antiquewhite2 238 223 204
6 antiquewhite3 205 192 176

(点点点)

> tail(r_colors)
color red green blue
652 yellow 255 255 0
653 yellow1 255 255 0
654 yellow2 238 238 0
655 yellow3 205 205 0
656 yellow4 139 139 0
657 yellowgreen 154 205 50

使用欧氏距离映射上面r_data中的颜色:

col_data$color_name <- sapply(
seq_along(col_data$Color),
function(i)
r_colors$color[
which.min(
(r_colors$red - col_data$red[i])^2 +
(r_colors$green - col_data$green[i])^2 +
(r_colors$blue - col_data$blue[i])^2
)
]
)

我们得到数据框:

> col_data
Color Count red green blue color_name
861 ED1B24 16774 237 27 36 firebrick2
1 000000 11600 0 0 0 black
18 23B14D 5427 35 177 77 seagreen
1996 FFFFFF 5206 255 255 255 white
1547 FEF200 3216 254 242 0 yellow
862 ED1B26 344 237 27 38 firebrick2

当然,颜色可能不完全匹配,但它们非常相似。下图显示了 col_data(左侧)中对应的最接近 R 颜色(右侧)的颜色。

Comparison of colours to nearest neighbour in RGB-space

(从技术上讲,我们只是在 RGB 空间中搜索最近的邻居。)

如果我正确理解你问题的第二部分,从这一点开始获得相对比例应该不会太棘手。

关于r - 使用 R 从十六进制颜色代码或 RGB 到颜色名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41209395/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com