J'essaie d'utiliser OpenCV dans Android. J'ai donc testé OpenCV pour la première fois en plaçant deux SurfaceView côte à côte. Un SurfaceView est utilisé pour prévisualiser la sortie (le format de sortie est clairement NV21) de la caméra. L'autre SurfaceView montre le même aperçu après le passage par OpenCV comme indiqué dans le code ci-dessous:Conversion de NV21 en RVB en utilisant OpenCV dans Android
public void onPreviewFrame(byte[] data, Camera camera) {
// TODO Auto-generated method stub
if(mYuv != null) mYuv.release();
mYuv = new Mat(height + height/2, width, CvType.CV_8UC1);
mYuv.put(0, 0, data);
Mat mRgba = new Mat();
Imgproc.cvtColor(mYuv, mRgba, Imgproc.COLOR_YUV2RGB_NV21, 4);
Bitmap map = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Utils.matToBitmap(mRgba, map);
preview.setBackgroundDrawable(new BitmapDrawable(map));
mRgba.release();
}
Mais l'image résultante après le passage par OpenCV est un vert, staticy ... chose:
Des idées?
Edit:
Code modifié un peu comme par commentaire.
public void onPreviewFrame(byte[] data, Camera camera) {
// TODO Auto-generated method stub
if(mYuv != null) mYuv.release();
mYuv = new Mat(height + height/2, width, CvType.CV_8UC1);
mYuv.put(0, 0, data);
Mat mRgba = new Mat();
Imgproc.cvtColor(mYuv, mRgba, Imgproc.COLOR_YUV2RGBA_NV21, 4);
Bitmap map = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Utils.matToBitmap(mRgba, map);
preview.setBackgroundDrawable(new BitmapDrawable(where.getResources(), map));
mRgba.release();
}
qui se traduit par ceci:
Essayez de convertir RGB en RGBA avant de l'afficher. IL semble que vous manquez ce bype supplémentaire par pixel. – Sam
@vasile Merci pour le conseil, mais il semble ne pas fonctionner. Voir édité. Il semble avoir ajouté une barre de plus. – vsector