欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现图像灰度化、线性灰度变化和二值化处理方法

程序员文章站 2022-06-04 12:11:18
1、图像灰度化: public bitmap bitmap2gray(bitmap bmsrc) { // 得到图片的长和宽 int widt...

1、图像灰度化:

public bitmap bitmap2gray(bitmap bmsrc) { 
  // 得到图片的长和宽 
  int width = bmsrc.getwidth(); 
  int height = bmsrc.getheight(); 
  // 创建目标灰度图像 
  bitmap bmpgray = null; 
  bmpgray = bitmap.createbitmap(width, height, bitmap.config.rgb_565); 
  // 创建画布 
  canvas c = new canvas(bmpgray); 
  paint paint = new paint(); 
  colormatrix cm = new colormatrix(); 
  cm.setsaturation(0); 
  colormatrixcolorfilter f = new colormatrixcolorfilter(cm); 
  paint.setcolorfilter(f); 
  c.drawbitmap(bmsrc, 0, 0, paint); 
  return bmpgray; 
}

2、对图像进行线性灰度变化

public bitmap linegrey(bitmap image) {
  //得到图像的宽度和长度 
  int width = image.getwidth(); 
  int height = image.getheight(); 
  //创建线性拉升灰度图像 
  bitmap linegray = null; 
  linegray = image.copy(config.argb_8888, true); 
  //依次循环对图像的像素进行处理 
  for (int i = 0; i < width; i++) { 
    for (int j = 0; j < height; j++) { 
      //得到每点的像素值 
      int col = image.getpixel(i, j); 
      int alpha = col & 0xff000000; 
      int red = (col & 0x00ff0000) >> 16; 
      int green = (col & 0x0000ff00) >> 8; 
      int blue = (col & 0x000000ff); 
      // 增加了图像的亮度 
      red = (int) (1.1 * red + 30); 
      green = (int) (1.1 * green + 30); 
      blue = (int) (1.1 * blue + 30); 
      //对图像像素越界进行处理 
      if (red >= 255)  
      { 
        red = 255; 
      } 

      if (green >= 255) { 
        green = 255; 
      } 

      if (blue >= 255) { 
        blue = 255; 
      } 
      // 新的argb 
      int newcolor = alpha | (red << 16) | (green << 8) | blue; 
      //设置新图像的rgb值 
      linegray.setpixel(i, j, newcolor); 
    } 
  } 
  return linegray; 
} 

3、对图像进行二值化

public bitmap gray2binary(bitmap graymap) { 
  //得到图形的宽度和长度 
  int width = graymap.getwidth(); 
  int height = graymap.getheight(); 
  //创建二值化图像 
  bitmap binarymap = null; 
  binarymap = graymap.copy(config.argb_8888, true); 
  //依次循环,对图像的像素进行处理 
  for (int i = 0; i < width; i++) { 
    for (int j = 0; j < height; j++) { 
      //得到当前像素的值 
      int col = binarymap.getpixel(i, j); 
      //得到alpha通道的值 
      int alpha = col & 0xff000000; 
      //得到图像的像素rgb的值 
      int red = (col & 0x00ff0000) >> 16; 
      int green = (col & 0x0000ff00) >> 8; 
      int blue = (col & 0x000000ff); 
      // 用公式x = 0.3×r+0.59×g+0.11×b计算出x代替原来的rgb 
      int gray = (int) ((float) red * 0.3 + (float) green * 0.59 + (float) blue * 0.11); 
      //对图像进行二值化处理 
      if (gray <= 95) { 
        gray = 0; 
      } else { 
        gray = 255; 
      } 
      // 新的argb 
      int newcolor = alpha | (gray << 16) | (gray << 8) | gray; 
      //设置新图像的当前像素值 
      binarymap.setpixel(i, j, newcolor); 
    } 
  } 
  return binarymap; 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。