我正在尝试在Android中使用OpenCV。因此,我首先通过将两个SurfaceView并排放置来测试OpenCV。其中一个SurfaceView用于预览从相机输出的图像(输出格式明显为NV21)。另一个SurfaceView在通过OpenCV后显示相同的预览,如下面的代码所示:
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处理后的图像是一个绿色、有静态的...东西:
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();
}
这导致了这个结果:
![丑陋的绿色物体又来了。](https://istack.dev59.com/LVEsN.webp)