美文网首页
ZXing二维码识别优化

ZXing二维码识别优化

作者: Allenlll | 来源:发表于2019-08-27 11:50 被阅读0次

    问题:二维码识别,如果图片中二维码太小就识别不出来
    解决方案:

      /**
         * 缩小图片至,MAX_QRCODE_SIXE
         *
         * @param image
         * @return
         */
        fun resizeToMaxSize(image: Bitmap?): Bitmap? {
            if(image == null){
                return null
            }
            var height = MAX_QRCODE_SIXE
            var width = MAX_QRCODE_SIXE
            if (image.width > image.height) {
                width = (height * (image.width.toDouble() / image.height)).toInt()
            } else {
                height = (width * (image.height.toDouble() / image.width)).toInt()
            }
            var bitmap: Bitmap? = null
            try {
                bitmap = Bitmap.createScaledBitmap(image, width, height, true)
            } catch (e: OutOfMemoryError) {
                e.printStackTrace()
            }
            return bitmap
        }
    
    • 截取屏幕区域的图片识别,减小干扰图像。
     private fun getBitmapFromView(view: View?):Bitmap?{
            var bitmap:Bitmap? = null
            view?.run {
                try {
                    bitmap = Bitmap.createBitmap(view.width,view.height,Bitmap.Config.RGB_565)
                    var canvas = Canvas(bitmap!!)
                    view.draw(canvas)
                } catch (e: OutOfMemoryError) {
                    e.printStackTrace()
                } catch (e: Exception) {
                    e.printStackTrace()
                }
    
            }
            return bitmap
        }
    
    
    • 从相机获取图像后,利用线程池异步解析
    • 配置只识别二维码格式,减少其它格式干扰
       var hint = HashMap<DecodeHintType,BarcodeFormat>()
                    hint.put(DecodeHintType.POSSIBLE_FORMATS, BarcodeFormat.QR_CODE)
                    rawResult = mQRCodeReader.decode(bitmap,hint)
    
    
    • 使用QRCodeReader而不是MultiFormatReader

    二维码基础

    • 二维码图像识别算法
    1. HybridBinarizer:混合的二值化器,继承自GlobalHistogramBinarizer。 识别要慢一点,但更有效,专门针对白色背景连续黑块的二维码设计的。更适合解析有阴影和渐变的二维码图像。
    2. GlobalHistogramBinarizer:全局直方图二值化器。GlobalHistogramBinarizer:适合低端设备,对cpu和内存要求不高,选择全部黑点计算,无法处理阴影和渐变
    3. PlanarYUVLuminanceSource平面的YUV,YUV是一种颜色编码方式,Y表示亮度(Lunimance:明亮度),UV是色度。平面的YUV亮度源。一般相机识别出来的图像要用这种方式。

    相关文章

      网友评论

          本文标题:ZXing二维码识别优化

          本文链接:https://www.haomeiwen.com/subject/vhasectx.html