ZXing二维码识别优化
2019-08-27 本文已影响0人
Allenlll
问题:二维码识别,如果图片中二维码太小就识别不出来
解决方案:
- 同比例缩小图片,图片缩小后干扰图像变得模糊,增加识别率。参考https://www.cnblogs.com/iliuyixin/p/6045530.html
/**
* 缩小图片至,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
二维码基础
- 二维码图像识别算法
- HybridBinarizer:混合的二值化器,继承自GlobalHistogramBinarizer。 识别要慢一点,但更有效,专门针对白色背景连续黑块的二维码设计的。更适合解析有阴影和渐变的二维码图像。
- GlobalHistogramBinarizer:全局直方图二值化器。GlobalHistogramBinarizer:适合低端设备,对cpu和内存要求不高,选择全部黑点计算,无法处理阴影和渐变
- PlanarYUVLuminanceSource平面的YUV,YUV是一种颜色编码方式,Y表示亮度(Lunimance:明亮度),UV是色度。平面的YUV亮度源。一般相机识别出来的图像要用这种方式。