IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 安卓图片二值化实现 -> 正文阅读

[移动开发]安卓图片二值化实现

最近应用在使用zxing进行二维码扫描时,发现对于金属质地,黑色凹槽的二维码识别率非常低且耗时很长,所以就有了探究二维码识别原理的想法。

正文

? ? ? 先灰度化再二值化是图片识别非常重要的一步,能够方便的提取图片特征。

? ? ? 原理是,将图片的灰度设定一个阈值,高于这个阈值的点变为黑色,低于这个阈值的点变为白色,这样能很方便的判断图片特征。

? ? ? 通用的灰度公式是:gray=r*0.3+g*0.59+b*0.11

? ? ? 获取颜色的argb方式:

alpha=color >>> 24

red=(color >> 16) & 0xFF

green=(color >> 8) & 0xFF ? ?

blue=color & 0xFF

? ? ? 生成颜色的方式:color=(alpha << 24) | (red << 16) | (green << 8) | blue

? ? ? 获取图片的color信息:

Bitmap对象.getPixels(@ColorInt int[] pixels, int offset, int stride,int x, int y, int width, int height)

  • pixels ?接收位图颜色的数组
  • offset ?第一个写入像素的索引[]
  • stride ?行之间要跳过的项目数(以像素[]为单位)(必须大于等于位图的宽度)。可能是负面的。
  • x ? ?? ?从位图中读取的第一个像素的x坐标
  • y ? ?? ?从位图中读取的第一个像素的y坐标
  • width ? ?从每行读取的像素数
  • height ? 要读取的行数

? ? ? 写入图片的color信息:

Bitmap对象.setPixels(@ColorInt int[] pixels, int offset, int stride,nt x, int y, int width, int height) 方法:用数组中的颜色替换位图中的像素。?

  • ?pixels ? 要写入位图的颜色
  • ?offset ? 从像素[]读取的第一种颜色的索引
  • ?stride ? 要在行之间跳过的颜色数(以像素为单位)。通常,该值与位图的宽度相同,但可以更大(或负值)。
  • ?x ? ? ? ?位图中要写入的第一个像素的x坐标。
  • ?y ? ? ? ?位图中要写入的第一个像素的y坐标。
  • ?width ? ?每行从像素[]复制的颜色数
  • ?height ? 要写入位图的行数

完整代码:

 public static Bitmap singleThreshold(final Bitmap bm,int digit) {

        int width = bm.getWidth();
		int height = bm.getHeight(); 
        int color;
		int r, g, b, a;
		
        Bitmap bmp = Bitmap.createBitmap(width, height
                , Bitmap.Config.ARGB_8888);//创建一个图片对象

        int[] oldPx = new int[width * height]; 
        int[] newPx = new int[width * height]; 
        bm.getPixels(oldPx, 0, width, 0, 0, width, height); //获取图片的颜色像素

        for (int j = 0; j < width * height; j++) {     
			//获取单个颜色的argb数据
			color = oldPx[j];
			r = Color.red(color); 
            g = Color.green(color); 
            b = Color.blue(color); 
            a = Color.alpha(color); 
            //计算单点的灰度值
			int gray = (int)((float)r*0.3+(float)g*0.59+(float)b*0.11);
			//根据阈值对比,低于的设置为黑色,高于的设置为白色
            if(gray < digit) {
			gray = 0; 
            } else {
			gray = 255; 
            }
            newPx[j] = Color.argb(a,gray,gray,gray);
			}
         
        bmp.setPixels(newPx, 0, width, 0, 0, width, height);
        return bmp;
    }

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:12:56  更:2022-03-06 13:16:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 16:25:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码