2016-04-04 2 views
2

こんにちは、私はJava AndroidプロジェクトでopenCVを使用して画像処理を行いたいと考えています。画像ファイルを読み込んでマットに変換する際に問題が発生しました。動作しません。まだ 画像処理のためにJavaでビットマップをマットに変換する

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

は、その後、私は、ビットマップを取得し、マットにそれを変換しようとしたが、::私は直接画像を読み取り、マットとしてそれを読んでみましたが、まだ動作しませんしました

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

私は何を間違えたのでしょうか?事前

答えて

2

私は自分自身で問題を解決しました。 それは我々がここでのOpenCV関連するコード を使用するためにライブラリをロードする必要があることに言及することにより、私はこのAndroid & OpenCV : Utils.bitmapToMat crashesを参照していますが、ライブラリをロードするために私のコードです:

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); 
} 

を変更する必要があることに注意してくださいあなたが使用しているバージョンと一致するopencvのバージョン。

私たちはここでARGB_8888 で適切なビットマップ形式を持っている場合bitmaptomatにのみ動作します。このhttps://groups.google.com/forum/#!topic/android-opencv/8EoxpTb4W3E に言及していマットにビットマップを変換するために私のコードです:この関数は、ここで呼び出されます

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; 
    } 

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

次にあなたがsourceImage を処理することができますが、これは便利 乾杯です願っています!

0

で おかげであなたはアンドロイドとのOpenCVを使用しているので、2つの可能性があるとして:

  • あなたがそこにないかもしれません与えているイメージのパス、あなたのイメージのパスをロギングしてみてください、とそれが本当に存在するか確認してください。

  • パスが有効であることが完全にわかっている場合は、アンドロイドプロジェクトのマニフェストファイルで外部ストレージの読み取り/書き込みの許可を定義しているかどうかを確認してください。

+0

マニフェストファイルに外部ストレージの読み取り/書き込みのアクセス許可を定義していますが、携帯電話で実行するとクラッシュすることがあります( –

+0

)。トレースバックもここにあります。 – ZdaR

関連する問題