参考文章原地址:
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 &&