栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java颜色检测

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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将获得颜色的“色调”:

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

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
方法,但如果语句可能是更容易明白这里。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508827.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号