2011-10-25 96 views
2

如何將rgb轉換爲hsv並在opencv for android屏幕上顯示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色調錶示在區間0,180。

如何看到這個:我在看每個3通道(H ,S,V)作爲灰色圖像,最後,即使在變換後圖像是相同的,只是你代表的圖像的方式是不同的

3

如果你想轉換RGB矩陣圖像爲HSV色彩空間,你可以這樣做:

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

之前,你在Android的屏幕顯示出來,你需要從3通道轉換HSV到4通道由於Android無法顯示m在3頻道。有關更多信息,請參閱this。這樣的代碼:

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