AndroidでOpenCVを使おうとしています。そこで、最初に2つのSurfaceViewを並べて配置してOpenCVをテストしました。1つの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();
}
その結果、次のようになります。