热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

安卓图片二值化实现

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

最近应用在使用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


推荐阅读
  • 在使用USB接口的二维条码扫描器时,发现其无法正确识别条码中的中文字符。然而,采用串口连接的方式则能够成功识别。目前面临的问题是如何将通过串口获取的数据在网页中进行实时展示,希望各位专家能提供解决方案,不胜感激。 ... [详细]
  • 基于JSP和SSM框架的超市收银系统毕业设计论文及源代码分析
    本研究基于JSP和SSM框架开发了一套超市收银系统,旨在提升超市收银效率和管理便捷性。系统运行环境包括JDK 1.8、Tomcat 7.0、MySQL数据库以及HBuilderX(也可使用WebStorm)作为前端开发工具,后端开发则采用Eclipse(IntelliJ IDEA亦可)。该系统实现了商品管理、订单处理、库存管理和报表生成等核心功能,具有良好的稳定性和扩展性。通过详细的设计与实现过程,本文为相关领域的研究提供了有价值的参考。 ... [详细]
  • 首个水风险评估工具正式上线,百余家机构呼吁共同关注水资源安全
    首个水风险评估工具正式上线,百余家机构呼吁共同关注水资源安全 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 家庭矿业:未来的投资前景依然可观?
    近年来,“家里有矿”这一说法常被用来形容家境殷实。结合2019年十大热词之一的“区块链”,“矿工”在区块链加密货币生态系统中占据着重要地位。随着技术的不断进步和市场的需求变化,家庭矿业作为一种新兴的投资方式,其未来发展前景依然值得期待。本文将探讨家庭矿业的投资潜力及其面临的挑战与机遇。 ... [详细]
  • 大家好,全新的技术专栏《从零开始掌握容器云网络实战》正式上线。该专栏将系统地介绍容器云网络的基础知识、核心技术和实际应用案例,帮助读者全面理解和掌握容器云网络的关键技术与实践方法。 ... [详细]
  • 利用Python与Android进行高效移动应用开发
    通过结合Python和Android,可以实现高效的移动应用开发。首先,需要安装Scripting Layer for Android (SL4A),这是一个开源项目,旨在为Android系统提供脚本语言支持。SL4A不仅简化了开发流程,还允许开发者使用Python等高级语言编写脚本,从而提高开发效率和代码可维护性。此外,SL4A还支持多种其他脚本语言,进一步扩展了其应用范围。通过这种方式,开发者可以快速构建功能丰富的移动应用,同时保持较高的灵活性和可扩展性。 ... [详细]
  • 如何在微信公众平台上完成官方认证流程及注意事项
    在微信公众平台上进行官方认证可以提升账号的权威性和可信度,为用户提供更好的使用体验。关于微信公众平台的认证流程,可以通过以下两种方式进行申请:一是通过微信公众平台官方网站提交相关资料;二是联系腾讯客服获取详细的认证指导。在整个过程中,需要注意提交的信息必须真实有效,确保审核顺利通过。此外,还需关注认证所需的时间和可能产生的费用,以便做好充分准备。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 世事难料:昔日辉煌的行业巨头,如今却依附他人
    近日,一条不太引人注目的新闻引起了我的注意,标题是《谷歌在硅谷豪掷巨资购地,甚至买下雅虎总部》。虽然这则消息并未让我惊叹于谷歌的财力雄厚,毕竟其当前的市场地位早已证明其实力,但更让人唏嘘的是,曾经风光无限的行业巨头雅虎,如今却沦落到被收购的地步。这一变化不禁令人感叹,商业世界的风云变幻,昔日的辉煌可能转瞬即逝。 ... [详细]
  • 深入对话上海视九叶文鑫:HTML5技术引领智能电视新趋势
    深入对话上海视九叶文鑫:HTML5技术引领智能电视新趋势 ... [详细]
  • 当前物联网领域十大核心技术解析:涵盖哪些关键技术?
    经过近十年的技术革新,物联网已悄然渗透到日常生活中,对社会产生了深远影响。本文将详细解析当前物联网领域的十大核心关键技术,包括但不限于:1. 军事物联网技术,该技术通过先进的感知设备实现战场环境的实时监测与数据传输,提升作战效能和决策效率。其他关键技术还包括传感器网络、边缘计算、大数据分析等,这些技术共同推动了物联网的快速发展和广泛应用。 ... [详细]
  • 免费赠送《Python Selenium WebDriver 3.0 自动化测试框架实战指南》电子书资源
    免费赠送《Python Selenium WebDriver 3.0 自动化测试框架实战指南》电子书资源 ... [详细]
  • 【Linux进阶指南】第一阶段第三课:体验与部署Ubuntu系统
    在正式踏上Linux学习之旅之前,本课程将引导你深入体验和部署Ubuntu系统。通过详细的操作步骤和实践演练,你将掌握Ubuntu的基本安装、配置及常用命令,为后续的进阶学习打下坚实的基础。此外,课程还将介绍如何解决常见问题和优化系统性能,帮助你更加高效地使用Ubuntu。 ... [详细]
  • C#微信开发入门教程第二篇:新手快速上手指南,含详细视频讲解
    在距离上次课程一个多星期后,我们终于带来了第二讲的内容。虽然原计划是一周一次更新,但由于工作繁忙有所延迟。近期在交流群中发现,一些初学者已经能够熟练调用微信接口,但对微信公众平台的消息接收处理机制还不够了解。因此,本次课程将详细介绍如何高效处理微信公众平台的消息接收,并提供详细的视频讲解,帮助大家快速上手。 ... [详细]
author-avatar
长风剑客2502852893
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有