2013-06-30 20 views
19
Mat b = new Mat(); 
Bitmap bmp = getIntent().getExtras().getParcelable("image_send"); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display_image); 
    Mat tmp = new Mat (bmp.getWidth(), bmp.getHeight(), CvType.CV_8UC1); 
    Utils.bitmapToMat(bmp, tmp); 
    Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_RGB2GRAY); 
    //Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_GRAY2RGB, 4); 
    Utils.matToBitmap(tmp, bmp); 

    iv = (ImageView) findViewById(R.id.imageView1); 
    iv.setImageBitmap(bmp); 
} 

Nie można wyświetlić bmp. Moja aplikacja zatrzymała się po zrobieniu zdjęcia.Konwertuj bitmapę na matę po przechwytywaniu obrazu za pomocą aparatu z Androidem

+0

nie można użyć kodu opencv w onCreate (natywne jeszcze nie zostały załadowane) – berak

Odpowiedz

24

Utils.bitmapToMap wymaga mapy bitowej typu ARGB_8888 lub RGB_565.

import org.opencv.android.Utils; 

Mat mat = new Mat();  
Bitmap bmp32 = bmp.copy(Bitmap.Config.ARGB_8888, true); 
Utils.bitmapToMat(bmp32, mat); 
3

Mat tmp = new Mat (bmp.getWidth(), bmp.getHeight(), CvType.CV_8UC1);

OpenCV Mata konstruktor oczekuje wierszy cols parę zamiast szerokość, wysokość której argumentami odwrócić je.

Spróbuj:

Mat tmp = new Mat (bmp.getHeight(), bmp.getWidth(), CvType.CV_8UC1);

-1

sam problem z moim app. W głównym działaniu musiałem udostępnić OpenCV. (Zakładam, że Twoja aplikacja spowodowała błąd łącza, gdy użyto biblioteki Mat). Wszystkie przykładowe aplikacje robią to. Dodaj to do swojej głównej aktywności.

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { 
     @Override 
     public void onManagerConnected(int status) { 
      switch (status) { 
       case LoaderCallbackInterface.SUCCESS: 
       { 
        Log.i("OpenCVManager setup", "OpenCV loaded successfully"); 
        //Use openCV libraries after this 
       } break; 
       default: 
       { 
        super.onManagerConnected(status); 
       } break; 
      } 
     } 
    }; 

    @Override 
    public void onResume() 
    { 
     super.onResume(); 
     OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, 
       mLoaderCallback); 
    } 
Powiązane problemy