当前位置: 移动技术网 > 移动技术>移动开发>Android > Android实现图像灰度化、线性灰度变化和二值化处理方法

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

2019年08月01日  | 移动技术网移动技术  | 我要评论

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; 
}

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网