【问题标题】:Grayscaling doesn't affect my image灰度不影响我的图像
【发布时间】:2017-05-24 05:35:59
【问题描述】:

我正在使用 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 变得无用)。任何帮助将不胜感激。 提前致谢!

【问题讨论】:

    标签: java android image-processing bitmap ocr


    【解决方案1】:

    尝试使用Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 而不是Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);

    【讨论】:

      猜你喜欢
      • 2015-01-20
      • 2020-05-04
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      • 2021-08-20
      • 2013-07-03
      相关资源
      最近更新 更多