2011-10-25 9 views
2

rgbをhsvに変換し、アンドロイド用のopencvでhsv表示を画面に表示するにはどうすればいいですか?android opencv rgb to hsv

using namespace std; 
using namespace cv; 

extern "C" { 
JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial3_Sample3View_FindFeatures(JNIEnv* env, jobject thiz, jint width, jint height, jbyteArray yuv, jintArray bgra) 
{ 
    jbyte* _yuv = env->GetByteArrayElements(yuv, 0); 
    jint* _bgra = env->GetIntArrayElements(bgra, 0); 

    Mat myuv(height + height/2, width, CV_8UC1, (unsigned char *)_yuv); 
    Mat mbgra(height, width, CV_8UC4, (unsigned char *)_bgra); 
    Mat mgray(height, width, CV_8UC1, (unsigned char *)_yuv); 


    //Please make attention about BGRA byte order 
    //ARGB stored in java as int array becomes BGRA at native level 
    cvtColor(myuv, mbgra, CV_YUV420sp2BGR, 4); 





    env->ReleaseIntArrayElements(bgra, _bgra, 0); 
    env->ReleaseByteArrayElements(yuv, _yuv, 0); 
} 

} 

上記のコードは、yuvのカメラから入力され、rgbに変換されます。私はcvtColor関数を使用してrgbからhsvに変換する必要があることを知っていますが、hsvのMatにはどのようなパラメータが必要ですか?そして、それをrgbではなく表示する方法

答えて

1

HSVでは、8ビットの符号なしを使用する必要があります。私はあなたの問題が色相であると仮定します(理論的には0から360の間でなければなりませんが、openCVでHueは0,180の区間で表されます)。

これを見る方法:3つのチャネル、S、V)を灰色のイメージとして表示します。最終的には、変換後もイメージが同じです。イメージを表現する方法が異なります。

3

RGBマットイメージをHSVカラースペースに変換する場合は、このように行います:AndroidはMを表示することはできませんので、あなたがAndroidの画面に表示する前に

Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGB2HSV, 3); //3 is HSV Channel 

、あなたは4チャンネルに3チャンネルからHSVに変換する必要があります3チャンネルで詳細については、thisを参照してください。コード:

Imgproc.cvtColor(dst, src, Imgproc.COLOR_HSV2RGBA, 4); // 4 is RGBA Channel