2016-04-04 15 views
2

Hallo ich möchte Bildverarbeitung mit OpenCV in meinem Java Android Projekt machen. So, jetzt habe ich Probleme beim Lesen der Bilddatei und konvertieren Sie es in Matte. Ich habe versucht, indem Sie das Bild direkt zu lesen und es als Mat lesen, aber immer noch nicht funktioniert:Konvertieren von Bitmap zu Matte in Java für die Bildverarbeitung

//get image source from folder 
    String imgPath = Environment.getExternalStorageDirectory().toString() + "/SimpleAndroidOCR/ocr.jpg"; 
    Mat sourceImage = Imgcodecs.imread(imgPath); 

Dann habe ich versucht, das Bitmap zu erhalten und wandeln es in Mat, aber immer noch nicht funktioniert:

Bitmap bitmap1 = BitmapFactory.decodeFile(_path, options); 
Mat sourceImage = new Mat(); 
Utils.bitmapToMat(bitmap1 , sourceImage); 

Könnte mir jemand sagen, was habe ich falsch gemacht? Vielen Dank im Voraus

Antwort

2

Ich habe eine Lösung für mein eigenes Problem gefunden. Ich beziehe mich auf diese Android & OpenCV : Utils.bitmapToMat crashes wodurch es erwähnt, dass wir die Bibliothek laden, um benötigen Hier OpenCV bezogenen Code zu verwenden, ist mein Code, um die Bibliothek zu laden:

private BaseLoaderCallback mLoaderCallBack = new BaseLoaderCallback(this) { 
    @Override 
    public void onManagerConnected(int status) { 
     if(status == LoaderCallbackInterface.SUCCESS){ 

     }else{ 
      super.onManagerConnected(status); 
     } 

    } 
}; 

public void onResume(){ 
    super.onResume(); 
    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_1_0, this, mLoaderCallBack); 
} 

Bitte beachten Sie, dass Sie das ändern sollte opencv-Version, um mit der von Ihnen verwendeten Version übereinzustimmen.

Um Bitmap zu konvertieren Ich beziehe mich auf diese https://groups.google.com/forum/#!topic/android-opencv/8EoxpTb4W3E bitmaptomat funktioniert nur auf die Matte, wenn wir richtige Bitmap-Format haben, die hier ARGB_8888 ist mein Code:

private Bitmap JPGtoRGB888(Bitmap img){ 
     Bitmap result = null; 

     int numPixels = img.getWidth() * img.getHeight(); 
     int[] pixels = new int[numPixels]; 

//  get jpeg pixels, each int is the color value of one pixel 
     img.getPixels(pixels,0,img.getWidth(),0,0,img.getWidth(),img.getHeight()); 

//  create bitmap in appropriate format 
     result = Bitmap.createBitmap(img.getWidth(),img.getHeight(), Bitmap.Config.ARGB_8888); 

//  Set RGB pixels 
     result.setPixels(pixels, 0, result.getWidth(), 0, 0, result.getWidth(), result.getHeight()); 

     return result; 
    } 

Diese Funktion hier aufgerufen wird,

Bitmap bmp32 = JPGtoRGB888(bitmap); 
Mat sourceImage = new Mat(); 
Utils.bitmapToMat(bmp32, sourceImage); 

Dann können Sie die source Hoffnung verarbeiten diese hilfreich ist Cheers!

0

Wie Sie OpenCV mit Android verwenden, so gibt es zwei Möglichkeiten:

  • Der Pfad des Bildes, das Sie können nicht da sein geben, versuchen Sie Ihr Bildpfad Protokollierung und überprüfen Sie, ob das wirklich existiert.

  • Wenn Sie absolut sicher sind, dass der Pfad gültig ist, dann überprüfen Sie, ob Sie die Berechtigung von External Storage Read/Write in der Manifest-Datei Ihres Android-Projekts definiert haben.

+0

Ich bin mir absolut sicher, dass das Pfadbild vorhanden ist und ich habe die Berechtigung von externem Speicher gelesen/geschrieben in der Manifestdatei, aber es stürzt immer noch ab, wenn ich es in meinem Telefon starte; ( –

+0

) TraceBack hier auch. – ZdaR

Verwandte Themen