我正嘗試在Android中使用OpenCV。所以我首先通過將兩個SurfaceView並排放置來測試OpenCV。一個SurfaceView用於從相機預覽輸出(輸出格式顯然是NV21)。其他SurfaceView表示通過後的OpenCV相同的預覽如下圖所示的代碼:在Android中使用OpenCV將NV21轉換爲RGB
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();
}
但通過OpenCV的後所產生的圖像是綠色的,staticy ......事情:
任何想法?
編輯:
根據評論修改了一下代碼。
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();
}
導致此:
嘗試在顯示前將RGB轉換爲RGBA。看起來你似乎錯過了每像素的額外範圍。 – Sam
@vasile感謝您的提示,但它似乎不工作。見編輯。它似乎又增加了一個'酒吧'。 – vsector