簡體   English   中英

從 javascript/nodejs 中的表中找到最接近的 RGB 值

[英]Find the closest RGB value from a table in javascript/nodejs

互聯網人! 我正在制作一個程序,該程序需要使用 Jimp 嘗試找到最接近的大量像素的 RGB 匹配。

假設你有一種略帶紫色的顏色,我想把它改成我桌子上的紫色,在這里:

    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)

我已經嘗試過一些東西,但它非常愚蠢並且沒有用,所以我不會告訴你細節。

有誰能夠幫助我? 謝謝!

如果我正確理解你的問題,你可以做這樣的事情

 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]]))

RGB 是一個 3 維空間。 將顏色視為 3d 空間中的一個點,您應該使用 3d 畢達哥拉斯找到兩點之間最接近的距離。

 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 [[best_match_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 == best_match_id); } const closest_color = get_closest_color(colors, [230, 200,0]); console.log(closest_color);

使用此處的函數查找 E 距離最小的顏色

JS 兩個值之間的色差/相似度%

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM