Android实现图像灰度化、线性灰度变化和二值化处理方法
作者:Sakura_echo 时间:2021-10-17 15:49:10
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;
}
来源:https://www.jianshu.com/p/bb52bc2143f8?utm_source=tuicool&utm_medium=referral
标签:Android,图像灰度化,线性灰度变化,二值化处理
0
投稿
猜你喜欢
Java实现指定线程执行顺序的三种方式示例
2021-08-16 15:11:34
Java面试题冲刺第二十五天--并发编程3
2023-09-11 04:40:10
Java深入学习图形用户界面GUI之事件处理
2023-11-29 14:14:57
zookeeper概述图文详解
2021-12-07 15:46:03
应用Java泛型和反射导出CSV文件的方法
2022-02-25 19:50:17
Android实现九格智能拼图算法
2021-11-07 22:40:11
Android实现读写USB串口数据
2023-10-21 19:12:56
SpringMVC整合mybatis实例代码
2022-09-24 08:22:03
浅析Java常用API(Scanner,Random)匿名对象
2023-05-04 09:42:39
Android控件之RatingBar自定义星级评分样式
2023-12-22 16:03:33
Java编程之双重循环打印图形
2022-02-01 22:06:37
Struts2修改上传文件大小限制方法解析
2023-02-22 21:13:19
判断List和Map是否相等并合并List中相同的Map
2022-12-29 02:11:10
Java 按照字节来截取字符串的代码(不会出现半个汉字)
2023-04-30 01:40:22
详解C++ bitset用法
2022-10-30 08:57:16
Java提取2个集合中的相同和不同元素代码示例
2023-11-28 05:48:41
Android实现多媒体录音笔
2022-03-26 17:25:00
SpringBoot切面拦截@PathVariable参数及抛出异常的全局处理方式
2023-05-27 13:59:52
Android提高之蓝牙隐藏API探秘
2022-05-15 03:30:14
解决android.support.v4.content.FileProvide找不到的问题
2022-09-10 05:42:57