首先写这篇博客,是我在做Java版本的Tensorflow Serving之后写,我显示搭建了Tensorflow Serving平台,按照Python客户端完成了通信,之后需要实现移端通信的搭建,做了Java、Android两个版本的客户端。言归正传,开始进入今天的正题。。。嘻嘻。。。

先介绍Java版本的两种读取图像RGB值存到集合的过程:

 

 

版本一:利用Rater类的方法getPixels()获取

String file = "C:\\Users\\rhp\\Desktop\\111\\name1111.jpg";
//Thumbnails类在我博客里有专门说明的一篇,需要的请参考
BufferedImage im = Thumbnails.of(file).forceSize(160, 160).outputFormat("bmp").asBufferedImage();
//Raster是BufferedImage接口的实现类,返回包含为图形操作生成的颜色的 Raster,调用Buffered对象的方法getDate获得像素值
Raster raster = im.getData();
float [] temp = new float[raster.getWidth() * raster.getHeight() * raster.getNumBands()];
		//获得像素RGB数组,遍历每一个r,g,b值存入集合中,其中raster.getPixels获取到的已经就是三通道的RGB值,一共76800个(我的是160*160*3),另外据我分析,getPixels()拿到的就是按r,g,b存储的三通道像素值,实验验证推理出来的
		float [] pixels  = raster.getPixels(0,0,raster.getWidth(),raster.getHeight(),temp);
		List<Float> floatList = new ArrayList<>();
		for(float pixel: pixels) {
		    floatList.add(pixel);
		}

Java 图像颜色提取 java获取图片rgb_Java 图像颜色提取

  //这是我打印floatList结果的部分展示,存储方式以r,g,b,r,g,b,...存储

Java版本二:利用Buffered对象调用getRGB()

String file = "C:\\Users\\rhp\\Desktop\\111\\name1111.jpg";
BufferedImage im = Thumbnails.of(file).forceSize(160, 160).outputFormat("bmp").asBufferedImage();
float[] rgb = new float[3];
		List<Float> floatList1 = new ArrayList<>();
		for(int i = 0; i< im.getWidth(); i++) {
  for(int j = 0; j<im.getHeight();j++) {
  int pixell = im.getRGB(j, i);
  rgb[0] = (pixell & 0xff0000) >> 16;
  rgb[1] = (pixell & 0xff00) >> 8;
  rgb[2] = (pixell & 0xff);
  floatList1.add(rgb[0]);
  floatList1.add(rgb[1]);
  floatList1.add(rgb[2]);
			}
		}

Java 图像颜色提取 java获取图片rgb_Image_02

//这是我打印floatList结果的部分展示,存储方式以r,g,b,r,g,b,...存储

其实本来是没有第三个版本的,哪想Android的不支持Java.awt里面的包,也是就是不支持Buffered类,不得已才有了第三个版本

Android版本三:利用图片转为输入流,再用Bitmap对象调用getPixel()方法

String a = "C:\\Users\\rhp\\Desktop\\111\\name1111.jpg";
FileInputStream fis = new FileInputStream(a);
Bitmap bitmap = BitmapFactory.decodeStream(fis);
Bitmap js = imageScale(bitmap, 160, 160);
List<Float> floatList1 = new ArrayList<>();
for (int i = 0; i<js.getWidth(); i++){
    for (int j =0; j<js.getHeight();j++){
        int pixell = js.getPixel(j,i);
        int r = Color.red(pixell);
        int g = Color.green(pixell);
        int b = Color.blue(pixell);
        floatList1.add((float) r);
        floatList1.add((float) g);
        floatList1.add((float) b);
    }
}
//由于Android编译特殊,就不演示结果了,和上面两个结果一模一样的总结一下,其实版本二是我为了验证版本三送入通信中的数据类型格式是否一致写的,也是在通信过程中慢慢的深入了解RGB的传播原理