2012-02-27 5 views
1

Android OpenCVバイナリを使用して画像を切り抜く際に問題が発生しています。Androidバイナリを使用してopenCVマトリックスを使用して画像を切り出す

これは私が画像の左上の象限トリミングしようとやっているものです:私は何を得る

Initialization { 
    mYuv = new Mat(mFrameSize.height + mFrameSize.height/2, mFrameSize.width, CvType.CV_8UC1); 
    mGraySubmat = mYuv.submat(0, mFrameSize.height, 0, mFrameSize.width); 
} 


processFrame(byte[] data) { 
    mYuv.put(0, 0, data); 
    Imgproc.cvtColor(mGraySubmat, mRgba, Imgproc.COLOR_GRAY2BGR, 4); 
    bmp = Bitmap.createBitmap(mFrameSize.width/2, mFrameSize.height/2, Bitmap.Config.ARGB_8888); 
    Rect roi = new Rect(0,0,mFrameSize.width/2,mFrameSize.height/2); 
    Mat faceMat = new Mat(mRgba,roi); 
    Utils.matToBitmap(faceMat.clone(), bmp);  

}

が文字化けした画像です。私は何をしていると言う他の投稿を見てきましたが、うまくいきません。実際には画像はそこにあるように見えますが、比例していない影の画像もあります。

私はこれを手動で行うことができ、それはファイルで動作します - 以下を参照してください。私は何か間違っているのですか?

processFrame(byte[] data) { 

    for (int i = 0; i < frameSize; i++) { 
    int y = (0xff & ((int) data[i])); 
    rgba[i] = 0xff000000 + (y << 16) + (y << 8) + y; 
} 
// Example of cropping the upper left corder 
bmp = Bitmap.createBitmap(mFrameSize.width/2, mFrameSize.height/2, Bitmap.Config.RGB_565); 
bmp.setPixels(rgba, 0/* offset */, mFrameSize.width /* stride */, 0, 0, mFrameSize.width/2, mFrameSize.height/2); 
+0

2つのソースは、最初のデータを使用しないので比較できません。とにかく、あなたのビットマップとデータの種類が一致している必要があります。 – rics

+0

ご迷惑をおかけしましたが、不足している部分を追加しました – scoleman2272

+0

あなたのコードを変更した後で、実際の解決策が見つからなかったので、あなたの質問をアップしました。 – rics

答えて

0

私はあなたがthis exampleから始まると思います。この元のソースでは、Imgproc.COLOR_GRAY2BGRの変換がないことがわかります。あなたはその後、カラーイメージを持っているしたい場合は、選択肢2を使用する必要があります。

Imgproc.cvtColor(mYuv, mRgba, Imgproc.COLOR_YUV420sp2RGB, 4); 

を、あなたはmGraySubmatは必要ありません。

あなたは、グレースケール画像が必要な場合は、最初の選択肢が優れている:

Imgproc.cvtColor(mGraySubmat, mRgba, Imgproc.COLOR_GRAY2RGBA, 4); 

この後者の選択はYCbCr_420_SP (NV21)形式の画像が何であるかをdefault preview formatの色成分を切り捨てます。

+0

私はImgproc.COLOR_YUV420sp2RGBとImgproc.COLOR_YUV420sp2RGBの両方をカラーグレースケールに使用しました。私が画像を切り抜こうとしない限り、彼らは両方とも期待どおりに動作します。この問題は、私がMat faceMat = new Mat(mRgba、roi)を使用した場合にのみ発生します。画像をトリミングする。それはひずみが入ってくる時です – scoleman2272