Android OCR 图片识别集成与图片预处理

这篇博客详细记录了在Android中进行OCR图片识别时的图片预处理步骤,包括应对复杂背景的处理方法。作者分享了参考资料,并欢迎读者提供更优方案。
摘要由CSDN通过智能技术生成

参考文章原地址:

1.https://blog.csdn.net/gf771115/article/details/40778091

2.https://www.cnblogs.com/bigdream6/p/8384174.html

因图片背景复杂多变,图片预处理过程繁琐,记录下我的处理过程以及用到的方法,若有更好的办法,请评论留言指教,多谢!

 //ocr初始化  
 private void initTessBaseData() {
    	try {
    		mTess = new TessBaseAPI();
    		String language = "zwp";
            File dir = new File(ROOT_PATH_LANGUAGE + "tessdata/");
            if (!dir.exists()){
                dir.mkdirs();
            }
            File file = new File(ROOT_PATH_LANGUAGE + "tessdata/" + language + ".traineddata");
            if(!file.exists()){
                Toast.makeText(MainActivity2.this,"不存在识别库,无法进行识别测试",Toast.LENGTH_SHORT).show();
                return;
            }
            mTess.init(ROOT_PATH_LANGUAGE, language);

            mTess.setDebug(true);
           mTess.setPageSegMode(TessBaseAPI.PageSegMode.PSM_AUTO);
		} catch (Exception e) {
			e.printStackTrace();
		}     

    }
//测试函数主体部分,可直接复制到点击事件或开始方法中

				//要处理的图片目录 
		        File dir = new File(ROOT_PATH_PHOTO); 
		        // 列出目录中的图片,得到数组
		        File[] files = dir.listFiles();
				for (int i = 0; i < files.length; i++) {
					try {
						FileInputStream fis = new FileInputStream(files[i].getAbsoluteFile());
						Bitmap bitmap  = BitmapFactory.decodeStream(fis);

				    	int jishu = 0;
				    	isRed = false;
				    	isHighLight = false;
				    	int width = bitmap.getWidth();
				        int height = bitmap.getHeight();
				        String line = null;
				        // 遍历原始图像像素,并进行二值化处理
				        a:for (int x = 0; x < width; x++) {
				            for (int y = 0; y < height; y++) {
				                // 得到当前的像素值
				                int pixel = bitmap.getPixel(x, y);
				                // 得到Alpha通道的值
				                int alpha = pixel & 0xFF000000;
				                // 得到Red的值
				                int red = (pixel & 0x00FF0000) >> 16;
				                // 得到Green的值
				                int green = (pixel & 0x0000FF00) >> 8;
				                // 得到Blue的值
				                int blue = (pixel & 0x000000FF);
                           //发现红色字体图片和其他图片不一致,此处进行区分
                           //如果其他字体,背景颜色出现红色,可能预处理不理想,进不到指定分支
				               if((red >= 160 &&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值