java颜色识别_Java颜色检测

小编典典

无论如何,您都必须阅读每个像素。你可以用

int rgb = bufferedImage.getRGB(x,y);

或者,您可以从图像中获取数据缓冲区,并直接以int[]数组的形式获取像素(如注释中所述),但是请注意,这可能在以后渲染此图像时对性能产生一些影响。

下一步将是检测像素是否具有某种颜色。说到照片,比较像

if (rgb == Color.BLUE.getRGB()) { ... }

没有任何意义:大多数情况下,像素不会 完美 呈现蓝色。相反,您可以通过将RGB值转换为HSB颜色空间来分析其色调。所以你可以做类似的事情

float hsb[] = new float[3];

int r = (rgb >> 16) & 0xFF;

int g = (rgb >> 8) & 0xFF;

int b = (rgb ) & 0xFF;

Color.RGBtoHSB(r, g, b, hsb);

然后,hsb阵列将包含颜色的色相,饱和度和亮度。这些值为0到1之间的值。将色相乘以360将获得颜色的“色调”:

065dc69390e8096bb4a75d8d71d74427.png

饱和度和亮度可用于检测“接近黑色”或“接近白色”的像素。因此,您的最终分析可能大致如下:

if (hsb[1] < 0.1 && hsb[2] > 0.9) nearlyWhite();

else if (hsb[2] < 0.1) nearlyBlack();

else {

float deg = hsb[0]*360;

if (deg >= 0 && deg < 30) red();

else if (deg >= 30 && deg < 90) yellow();

else if (deg >= 90 && deg < 150) green();

else if (deg >= 150 && deg < 210) cyan();

else if (deg >= 210 && deg < 270) blue();

else if (deg >= 270 && deg < 330) magenta();

else red();

}

这些嵌套if语句也可以通过使用来避免NavigableMap其floorEntry和ceilingEntry方法,但如果语句可能是更容易明白这里。

2020-11-13

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值