2013-06-30 17 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); 
} 

Impossibile visualizzare il bmp. La mia app si è fermata dopo aver scattato una foto.Converti bitmap in Mat dopo l'acquisizione dell'immagine utilizzando la fotocamera Android

+0

non è possibile utilizzare il codice opencv su onCreate (il nativo non è ancora caricato) – berak

risposta

24

Utils.bitmapToMap richiede bitmap di tipo ARGB_8888 o 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 Mat costruttore aspetta righe cols coppia invece di larghezza, altezza come argomenti, li invertire.

Prova:

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

-1

stesso problema con la mia app. Nell'attività principale, dovevo rendere OpenCV utilizzabile. (suppongo che l'app abbia generato un errore di collegamento quando è stata utilizzata la libreria Mat). Tutte le app di esempio eseguono questa operazione. Includi questa tua attività principale.

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