我正尝试在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