2

さて、私はオンラインで検索してみましたが、これが見つかりません。

私は持っています:

  1. 私が混合して使用しているOpenCV4Android:Javaとネイティブ。
  2. で得られたマット

    capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);

これは他の誰かのライブラリであり、完全に非ネイティブな方法で構築されているため、ネイティブに変更することはできません。

  1. 以下を使用してこのマットを渡すネイティブメソッドmFrame.nativeObj

    JNIEXPORT int JNICALL Java_com_... ( ...jlong addr ... )
    {
    
        Mat& mrgba = *((Mat*)addr);
    
        // do stuff
    
        imwrite( mrgba, ... );
    }
    

さて...私はこの行列を使用し、それをimwriteすべてこのネイティブ部分に、で記述します。imwriteはファイルを書き込みますが、その色はすべて間違っています。白の場合は赤、黒の場合は緑、テーブルの色、つまり黄色がかった場合は紫。さて、やみくもにやってみる代わりにcvColorconvertTo私はむしろ何かを知りたいです。

チャネルの数、タイプ、チャネルの順序など、最初に取得されたフレームについて知っておくべきことは何ですか。

capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);

その後、JNIを介してネイティブOpenCVに渡されますか?事実上、ネイティブimwriteが動作するには、どのような変換を行う必要がありますか?

4

2 に答える 2

1

どういうわけか、

capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);

次のように変換する必要があります:

cvtColor(mrgba, mbgr, CV_YCrCb2RGB, 4);

imwriteSDカードに画像を正しく出力するために。

理由はわかりませんが(imwriteBGR画像を受け入れることになっています)、少なくともこれで私の質問に答えることができます。

于 2013-01-17T09:06:27.500 に答える
0

試す

capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_BGRA);

coz OpenCVは、赤、緑、青ではなく、青、緑、赤のチャネルで画像を読み取ります。

于 2013-01-15T16:11:23.243 に答える