从颜色列表中查找最接近的颜色

阿里·哈桑(Ali Hassan)

我有一个带有R,G,B值的颜色列表。下面使用“ Color.rgb(R,G,B)”显示一些数据。然后进行图像处理,当用户触摸图像上的某处时,我获得了该触摸像素的RGB值。如何从我的颜色列表中搜索此RGB值。搜索功能应为:如果列表返回位置或值中存在RGB。如果RGB不存在,则返回列表中最接近的值。我的搜索功能是:

List<Colors> colors;
touchedRGB = bitmap.getPixel(x, y);
        for (int i = 0; i < colors.size(); i++) {
            Colors color=colors.get(i);
            if (touchedRGB==Color.rgb(color.getRcolor(),color.getGcolor(), color.getBcolor())) {
                Log.v("OK", "Color found at:"+i);
            }
        }

它仅检查并返回是否存在颜色不是最接近的颜色。这是颜色列表的代码:

    public class Colors {

public int rowid;
public int Rcolor;
public int Gcolor;
public int Bcolor;
public int RGB;
public int getRowid() {
    return rowid;
}

public void setRowid(int rowid) {
    this.rowid = rowid;
}
public int getRcolor() {
    return Rcolor;
}

public void setRcolor(int Rcolor) {
    this.Rcolor = Rcolor;
}

public int getGcolor() {
    return Gcolor;
}

public void setGcolor(int Gcolor) {
    this.Gcolor = Gcolor;
}

public int getBcolor() {
    return Bcolor;
}

public void setBcolor(int Bcolor) {
    this.Bcolor = Bcolor;
}

}

日志猫:

06-02 04:40:59.911: V/Color(1539): RGB:-2064 R:255 G:247 B:240
06-02 04:40:59.921: V/Color(1539): RGB:-139303 R:253 G:223 B:217
06-02 04:40:59.981: V/Color(1539): RGB:-147017 R:253 G:193 B:183
06-02 04:41:00.031: V/Color(1539): RGB:-352102 R:250 G:160 B:154
06-02 04:41:00.121: V/Color(1539): RGB:-555139 R:247 G:135 B:125
06-02 04:41:00.171: V/Color(1539): RGB:-2136478 R:223 G:102 B:98
06-02 04:41:00.181: V/Color(1539): RGB:-3781045 R:198 G:78 B:75
06-02 04:41:00.221: V/Color(1539): RGB:-197923 R:252 G:250 B:221
06-02 04:41:00.361: V/Color(1539): RGB:-3403 R:255 G:242 B:181
船长科德曼

创建一个“距离”功能,该功能可以比较两种颜色并为您提供距离。相等的颜色的距离为0。

根据“最接近的颜色”对您的含义,有很多实现距离的方法。最简单的方法是只使用RGB差异的总和:

public int Distance(Color a, Color b) {
    return Math.Abs(a.r - b.r) + Math.Abs(a.g - b.g) + Math.Abs(a.b - b.b);
}

或者,您可以将RGB解释为3D空间中的一个点并获取几何距离,如下所示:

public double Distance(Color a, Color b) {
    return Math.Sqrt(Math.Pow(a.r - b.r, 2) + Math.Pow(a.g - b.g, 2) + Math.Pow(a.b - b.b, 2));
}

对于大多数简单的应用程序,这通常已经足够了。如果您想进行更现实的比较,则可以将RGB颜色转换为HSV之类的内容,并且主要根据色相进行比较。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查找图像中每个像素最接近的RGB颜色

来自分类Dev

在日期时间列表中查找最接近的日期

来自分类Dev

从两个数组列表中查找最接近的数字

来自分类Dev

在字典键列表中查找最接近的值Python

来自分类Dev

优化在值列表中查找最接近的值

来自分类Dev

在日期列表中查找最接近的过去日期

来自分类Dev

从列表中查找最接近的字符串匹配

来自分类Dev

使用linq在C#的列表中查找最接近的值?

来自分类Dev

在输入日期之前的列表中查找最接近的日期

来自分类Dev

从两个数组列表中查找最接近的数字

来自分类Dev

在python列表中查找最接近平均值的元素

来自分类Dev

C# 在列表中查找价格最接近 0 的行

来自分类Dev

查找与欧氏距离以外的最接近调色板算法的颜色

来自分类Dev

查找最接近列表目标和的数字

来自分类Dev

在Java集合中查找最接近的对象

来自分类Dev

从点数组中查找最接近的点

来自分类Dev

在AngularJS中查找最接近的元素

来自分类Dev

从点数组中查找最接近的点

来自分类Dev

从许多rect中查找最接近的rect

来自分类Dev

在字典中查找数字的最接近的下键

来自分类Dev

在defaultdict中查找最接近的键

来自分类Dev

从行内的 div 中查找最接近的值

来自分类Dev

如何使用lapply在R中的列表中查找最接近的值?

来自分类Dev

在最接近指定日期的列表中查找上一个日期

来自分类Dev

在列表中查找最接近一小时前的时间戳

来自分类Dev

在数字列表中查找数字对最接近的匹配项的算法

来自分类Dev

在未排序的float列表中查找最接近元素的索引的最快方法

来自分类Dev

给定一个浮点数,查找列表中还是最接近的数字

来自分类Dev

在列表中查找最接近一小时前的时间戳

Related 相关文章

  1. 1

    查找图像中每个像素最接近的RGB颜色

  2. 2

    在日期时间列表中查找最接近的日期

  3. 3

    从两个数组列表中查找最接近的数字

  4. 4

    在字典键列表中查找最接近的值Python

  5. 5

    优化在值列表中查找最接近的值

  6. 6

    在日期列表中查找最接近的过去日期

  7. 7

    从列表中查找最接近的字符串匹配

  8. 8

    使用linq在C#的列表中查找最接近的值?

  9. 9

    在输入日期之前的列表中查找最接近的日期

  10. 10

    从两个数组列表中查找最接近的数字

  11. 11

    在python列表中查找最接近平均值的元素

  12. 12

    C# 在列表中查找价格最接近 0 的行

  13. 13

    查找与欧氏距离以外的最接近调色板算法的颜色

  14. 14

    查找最接近列表目标和的数字

  15. 15

    在Java集合中查找最接近的对象

  16. 16

    从点数组中查找最接近的点

  17. 17

    在AngularJS中查找最接近的元素

  18. 18

    从点数组中查找最接近的点

  19. 19

    从许多rect中查找最接近的rect

  20. 20

    在字典中查找数字的最接近的下键

  21. 21

    在defaultdict中查找最接近的键

  22. 22

    从行内的 div 中查找最接近的值

  23. 23

    如何使用lapply在R中的列表中查找最接近的值?

  24. 24

    在最接近指定日期的列表中查找上一个日期

  25. 25

    在列表中查找最接近一小时前的时间戳

  26. 26

    在数字列表中查找数字对最接近的匹配项的算法

  27. 27

    在未排序的float列表中查找最接近元素的索引的最快方法

  28. 28

    给定一个浮点数,查找列表中还是最接近的数字

  29. 29

    在列表中查找最接近一小时前的时间戳

热门标签

归档