2017-01-09 50 views
0

我正在使用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變得無用)。任何幫助將非常appriciated。 在此先感謝!

回答

0

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