首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript/nodejs中从表中查找最接近的RGB值

在javascript/nodejs中从表中查找最接近的RGB值
EN

Stack Overflow用户
提问于 2021-11-08 07:15:30
回答 3查看 86关注 0票数 1

互联网的人们!我正在编写一个程序,它需要尝试使用Jimp找到大量像素的最接近的RGB匹配。

假设你有一种略带紫色的颜色,我想把它改为我的表格中的紫色,如下所示:

代码语言:javascript
复制
    var colors = [
        [0,0,255,0],
        [1,255,165,0],
        [2,0,0,255],
        [3,255,192,203],
        [4,165,42,42],
        [5,255,255,255],
        [6,0,0,0],
        [7,230,230,350],
        [8,255,255,0],
        [9,0,0,0],
    ]

(可以忽略其中一个数组中的第一个数字,其余的只有R、G和B)

所以如果我有一个像(255,7,1)这样的红色,我想把它和我表中的红色匹配起来,就是(255,0,0)

我已经尝试了一些东西,但它非常愚蠢并且不起作用,所以我将省去你的细节。

有人能帮我吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-11-08 08:22:48

RGB是一个三维空间。将一种颜色视为3d空间中的一个点,您应该使用3d毕达哥拉斯找到两个点之间的最近距离。

代码语言:javascript
复制
const colors = [
  [0,0,255,0],
  [1,255,165,0],
  [2,0,0,255],
  [3,255,192,203],
  [4,165,42,42],
  [5,255,255,255],
  [6,0,0,0],
  [7,230,230,350],
  [8,255,255,0],
  [9,0,0,0],
]

function get_closest_color(colors, [r2, g2, b2]) {
  const [[closest_color_id]] = (
    colors
    .map(([id, r1,g1,b1]) => (
      [id, Math.sqrt((r2-r1)**2 + (g2-g1)**2 + (b2-b1)**2)]
    ))
    .sort(([, d1], [, d2]) => d1 - d2)
  );
  return colors.find(([id]) => id == closest_color_id);
}

const closest_color = get_closest_color(colors, [230, 200,0]);
console.log(closest_color);

票数 2
EN

Stack Overflow用户

发布于 2021-11-08 07:31:42

如果我没理解错你的问题,你可以这样做

代码语言:javascript
复制
const colors = [
        [0,0,255,0],
        [1,255,165,0],
        [2,0,0,255],
        [3,255,192,203],
        [4,165,42,42],
        [5,255,255,255],
        [6,0,0,0],
        [7,230,230,350],
        [8,255,255,0],
        [9,0,0,0],
    ]
    
const findClosestColor = (color, colors) => 
 colors.reduce((res, c) => {
 
  const distance = [1,2,3].reduce((sum, i) => sum + Math.abs(c[i] - color[i]), 0)
  if(distance > res.distance){
   return res;
  }
  return {
   closest: c,
   distance
  }
 }, {closest: null, distance: 9999} ).closest



console.log(findClosestColor([0, 255,7,1], [[1,0,0,200], [2,255,0,0], [3, 128,128,128]]))

票数 0
EN

Stack Overflow用户

发布于 2021-11-08 07:31:33

使用此处的函数查找E距离最小的颜色

Color difference/similarity% between two values with JS

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69879777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档