6

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();

}

その結果、次のようになります。再び醜い緑のもの。

4

1 に答える 1

8

了解しました。どこに行ったのかわかりました。

私は最初にこのようなことをしました:

public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {

    this.width = width; this.height = height;
    params.setPreviewSize( width, height );
    camera.setParameters( params );
    camera.startPreview();

}

問題は、Androidのカメラが特定のプレビュー解像度しかサポートしていないことです。したがって、私が設定していた特定の解像度は機能しませんでした。だから、私はそれをこれに変更しました:

public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {

    Size size = params.getPreviewSize();
    this.height = size.height;
    this.width = size.width;
    camera.setParameters( params );
    camera.startPreview();

}

そして、すべてがA-OKで動作します!正直なところ、これは私がエラーを期待していた場所ではなかったので、これは整形式の質問ではありませんでした。

于 2012-07-06T18:41:57.087 に答える