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; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Android跨进程抛异常的原理的实现
下一篇: 矩阵快速幂处理一类线性递推组问题