java 图像灰度化
if(flag_load){
// 读入图片
File inputFile = new File("G:\\vehicle license plate recognition system\\image\\1.png");
// BufferedImage的主要作用就是将一副图片加载到内存中
BufferedImage input = ImageIO.read(inputFile);
int wi=input.getWidth();
int hi=input.getHeight();
pixels new int[iw*ih];
// 将相应的图片转换
BufferedImage grayImage = new BufferedImage(iw, ih,BufferedImage.TYPE_BYTE_GRAY);
for(int i=0; i<iw; i++){
for(int j=0; j<ih; j++){
int rgb = input.getRGB(i, j);
//红色:(255,0,0)或0x00FF0000
//绿色:(0,255,0)或0x0000FF00
//蓝色:(255,255,255)或0x00FFFFFF
// 取与运算的结果就是除了表示所对应的颜色的数字值之外其余部分都是零//加权平均值法
int grey = (int) (0.299*((rgb&0xff0000 )>>16)+0.587*((rgb&0xff00 )>>8)+0.114*((rgb&0xff)));
// 就是把四个八位二进制数
// 255<<24:11111111变成111111110000...(24个0)
rgb = 255<<24|grey<<16|grey<<8|grey;grayImage.setRGB(i, j, rgb);
}
}
tmp = grayImage;
try{
PixelGrabber pg = new PixelGrabber(tmp,0,0,iw,ih,pixels,0,iw);
// 得到像素数组
pg.grabPixels();}catch(InterruptedException e3){
e3.printStackTrace();
}
flag_grey = true;
repaint();
} else{
JOptionPane.showMessageDialog(null, "先点击“装载图像”,3Q!","提示:",
JOptionPane.WARNING_MESSAGE);
}
}
BufferedImage.TYPE_INT_RGB:8 位 RGB 颜色分量,不带alpha通道。
BufferedImage.TYPE_INT_ARGB:8 位 RGBA 颜色分量,带alpha通道。
BufferedImage.TYPE_INT_ARGB_PRE:8 位 RGBA 颜色分量,已预乘以 alpha。
BufferedImage.TYPE_INT_BGR:8 位 RGB 颜色分量Windows 或 Solaris 风格的图像,不带alpha通道。
BufferedImage.TYPE_3BYTE_BGR:8位GBA颜色分量,用3字节存储Blue、Green和Red三种颜色,不存在alpha。
BufferedImage.TYPE_4BYTE_ABGR:8位RGBA颜色分量,用3字节存储Blue、Green和Red三种颜色以及1字节alpha。
BufferedImage.TYPE_4BYTE_ABGR_PRE:具有用3字节存储的Blue、Green和Red三种颜色以及1字节alpha。
BufferedImage.TYPE_USHORT_565_RGB:具有5-6-5RGB颜色分量(5位Red、6位Green、5位Blue)的图像,不带alpha。
BufferedImage.TYPE_USHORT_555_RGB:具有5-5-5RGB颜色分量(5位Red、5位Green、5位Blue)的图像,不带alpha。
BufferedImage.TYPE_BYTE_GRAY:表示无符号byte灰度级图像(无索引)。
BufferedImage.TYPE_USHORT_GRAY:表示一个无符号short 灰度级图像(无索引)。
BufferedImage.TYPE_BYTE_BINARY:表示一个不透明的以字节打包的 1、2 或 4 位图像。
BufferedImage.TYPE_BYTE_INDEXED:表示带索引的字节图像。