我正在使用tessaract扫描文本并将其转换为字符串,到目前为止一直很好,但我有一个灰度图像的问题。我用我的相机捕获图像,我想对它们进行灰度级并重新缩放它们以节省一些内存,我通过使用BitmapFactory.Options和方法inSimpleSize(把它放在4中)来做到这一点。 之后,我试图从文件夹中获取图像并对其进行灰度化。但是没有用 - 文字无法从照片中提取出来。但是,当我删除灰度工作。 这是我的代码:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap bitmap = BitmapFactory.decodeFile(imgUri.getPath() , options);
// bitmap = toGrayscale(bitmap);
result = extractText(bitmap);
textView.setText(result);
extractText方法只需调用Tessaract并扫描图像,它就可以正常工作而不需要灰度。
我在网上找到的toGrayscale代码(它正在运行,我已经尝试过它作为过滤器,我很满意):
public Bitmap toGrayscale(Bitmap bmpOriginal)
{
int width, height;
height = bmpOriginal.getHeight();
width = bmpOriginal.getWidth();
Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
Canvas c = new Canvas(bmpGrayscale);
Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
paint.setColorFilter(f);
c.drawBitmap(bmpOriginal, 0, 0, paint);
return bmpGrayscale;
}
以下是使用相机拍摄照片的代码:
if (captureImg != null) {
captureImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startCameraActivity();
}
});
private void startCameraActivity() {
try {
String IMGS_PATH = Environment.getExternalStorageDirectory().toString() + "/Noetic/imgs";
prepareDirectory(IMGS_PATH);
String img_path = IMGS_PATH + "/ocr.jpg";
outputFileUri = Uri.fromFile(new File(img_path));
final Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, PHOTO_REQUEST_CODE);
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
}
我一直在寻找解决方案但却找不到任何东西。我有一些理论为什么这不起作用 - 其中之一是因为我的灰度方法创建相同的图像但是新的(因此BitmapFactory.Options.getSampleSize变得无用)。任何帮助都会很有帮助。 提前谢谢!
答案 0 :(得分:0)
尝试使用Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
代替Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);