近期偶然发掘一个API,能够获取RGB图像三原色,实现响应的有些图像计算功能;
在代码示例起始前,先简单简述有些RGB三原色的概念吧;在光的折射下能够显现彩虹样式的彩带,在计算机行业中,一般运用红绿蓝来做为基色,亦便是常说的RGB;自然界中咱们所有的可见颜色,均可运用红绿蓝三种颜色区别比例组合而得,三原色亦叫作之为三基色;
咱们能够运用红绿蓝三种颜色适当组合,从而获取想要的颜色,每一个像素在每种颜色上能够负载的亮度级别为256(0-255)阶,因此咱们一般能够看到在暗示某种颜色时,时常会运用(255, 0, 0) 这般来暗示,三个坐标的值,分别对应着颜色 红绿蓝 三种颜色的亮度;
在颜色模式中有一张图,比较形象的能够描述出几种颜色的对照关系;
摘自李涛公众摄影2015课程素材上面这种图是取自李涛的公众摄影2015课程素材,从上面这张图咱们能够比较直观的看到三原色的叠色效果;而三基色及叠色的RGB值如下所示:
/**
* 在三原色RGB中,红(Red)、绿(Green)、蓝(Blue)
* 红色暗示为(255, 0, 0)
* 绿色暗示为(0, 255, 0)
* 蓝色暗示为(0, 0, 255)
*
* 纯黑暗示为(0, 0, 0)
* 纯白暗示为(255, 255, 255) 红 + 绿 + 蓝 = 白
*
* 青色暗示为(0, 255, 255) 绿 + 蓝 = 青
* 品红色暗示(255, 0, 255) 红 + 蓝 = 品红
* 黄色暗示为(255, 255, 0) 红 + 绿 = 黄
*/
基于以上基本,咱们能够运用java代码,从而获取照片颜色信息,从而能够处理有些对应的业务场景或计算等;
在本地调试过程中,分别运用了openCV和JDK自带的BufferedImage两种API来计算RGB颜色,经测试,发掘BufferedImage貌似计算的结果更加准确且不必须引入第三方依赖;这儿将采用BufferedImage进行代码演示;
首要咱们必须将照片读取到内存中,已方便对照片进行计算,JDK的ImageIO类为咱们供给了4种读取照片文件的方式;
-- 方式一:基于磁盘文件
String filePath="D:\\下载\\颜色模式.jpg";
final BufferedImage read = ImageIO.read(new File(filePath));
-- 方式二:基于InputStream字节流(有多种实现,分场景选取)
String filePath="D:\\下载\\颜色模式.jpg";
InputStream stream = new FileInputStream(filePath);
final BufferedImage read = ImageIO.read(stream);
-- 方式三:基于URL网络文件
final URL url = new URL("https://test-url.com/test-img.jpge");
final BufferedImage read = ImageIO.read(url);
-- 方式四:基于ImageInputStream照片输入流
-- ImageInputStream 是 InputStre
|