【问题标题】:Detect only red pixels in Java在 Java 中只检测红色像素
【发布时间】:2012-06-19 12:18:00
【问题描述】:

我需要使用 Java 检测图像中的所有红色像素。最好的方法是什么?

仅当红色 RGB 值 > 200 时才假设像素为红色还不够好(请参阅this table)。

那么有没有更好的方法来做到这一点?还是有一些 red-color-rgb 算法?

【问题讨论】:

  • 您在这里问了两个问题:一个是,“我如何确定某种颜色(由 RGB 值表示)是否看起来是红色的?”,另一个是,“你能用 Java 为我写这个程序吗?”。第一个问题很好,第二个问题不是(因此我不赞成)......除非你证明你已经做出了自己的一些努力。

标签: java image-processing colors rgb


【解决方案1】:

看看YCrCb色彩空间。

简单算法:将您的 RGB 图像转换为 YCrCb,提取红色通道并设置阈值。

【讨论】:

  • 您能否提供一些红色提取和应用阈值的代码/伪代码示例?
【解决方案2】:

将 RGB 转换为 HSL,并对色调 (H) 分量进行阈值处理。

【讨论】:

  • 当 > 345 或 if (hsv[0]*360 > 345 || hsv[0]*360 < 15) { 但这并没有给出可接受的结果......
  • @francisMi:请更具体一些。什么是不可接受的?
  • @francisMi 你试过我的解决方案了吗?另请查看this 文章。他们还使用 HSV(和 RGB)检测红色。
  • @Astor:但那是不可接受的呢?如果 OP 没有提供任何细节,我无能为力。
  • @OliCharlesworth 它没有检测到所有的红色(可能是因为不同的照明)。见my question。我还没有找到好的解决方案。
【解决方案3】:

正如您所建议的,您可能想在 HSB 空间中进行一些比较。您可能需要根据您的期望为所有三个值定义适当的愤怒。

您可以使用Color.RGBtoHSB 获取给定颜色的值。

http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#RGBtoHSB%28int%2C%20int%2C%20int%2C%20float%5B%5D%29

【讨论】:

  • 1.4.2?请随时加入我们的第三个千年!目前在哪里查看 Java 7。
  • 如果您在 google 上搜索 Color.RGBtoHSB,第一个链接是 1.4.2 文档。我发现我所做的大多数 Java 搜索都是这种情况——旧文档首先出现。我必须在每次搜索后附加“7”才能获得它,因此请调出最新的文档,这真是太可惜了。
  • 对于一些网址(包括这个),您只需将路径中的“1.4.2”替换为“7”即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
相关资源
最近更新 更多