2017-05-29 2 views
2

J'ai réussi à dessiner un rectangle de superposition afin que le contenu du rectangle soit le seul à être traité et que l'application ignore le reste de la région de la caméra. link to ScreenshotRecadrer la sous-section rectangle sur camera2 et la passer à opencv pour traitement

Le problème est que je veux recadrer le rectangle ci-dessus sur la fonction onimagaavailable comme indiqué ci-dessous:

@Override 
    public void onImageAvailable(ImageReader reader) { 
     Image img = reader.acquireLatestImage(); 

     //THIS IS WHERE I WANT TO CROP THE IMAGE TO ONLY SHOW WHAT WAS IN THE 
     // ABOVE DRAWN RECTANGLE BUT I DONT KNOW HOW, I HAVE GOOGLED FOR THE 
     // PAST WEEK ON THIS 


     //after processing i should pass the image to my opencv processing 
     //algorithm 
     process(img) 
    } 

Ceci est mon code pour dessiner la superposition de rectangle sur le dessus de camera2

@Override 
protected void onDraw(Canvas canvas) { // Override the onDraw() Method 
    super.onDraw(canvas); 

    paint.setStyle(Paint.Style.STROKE); 
    paint.setColor(Color.WHITE); 
    paint.setStrokeWidth(10); 
    int width = canvas.getWidth()/2; 
    int height = canvas.getHeight()/4; 
    int height1 = canvas.getHeight()/3; 
    int height_1 = canvas.getHeight()/10; 

    int fin = canvas.getWidth() + canvas.getWidth()/3; 
    int top = height/4; 

    Log.e("top", top + ""); 
    canvas.drawRect(canvas.getWidth() - (canvas.getWidth() - 150), 
    canvas.getHeight() - fin, canvas.getWidth() - 150, height + top, paint); 

} 

Veuillez help/dites-moi quel code je peux utiliser pour rogner le rectangle de l'image ImageReader afin que je puisse passer l'image recadrée à mon algorithme de traitement

+0

Notez que vous pouvez utiliser la caméra OpenCV et recadrer l'image d'aperçu dans 'onCameraFrame()' de sorte que le même sous-tapis soit affiché et traité. Voir https://stackoverflow.com/a/47519725/192373 –

Répondre

2

dans onImageAvailable(), vous pouvez utiliser Bitmap.createBitmap si c'est le format JPEG que vous converti en bitmap

Rect rectCrop = new Rect(left,top,right,bottom); 
Bitmap bitmapRotated = Bitmap.createBitmap(bitmap, rectCrop.left, rectCrop.top, rectCrop.width(), rectCrop.height(), mat, true); 

si vous utilisez YUV, vous pouvez réduire la mémoire et utiliser compressToJpeg avec un rectangle, il est procédé plus léger

yuv.compressToJpeg(rect, compress, out);