2015-07-12 106 views
0

我試圖在OpenCV中爲android(實時相機視圖)編寫顏色(綠色)檢測代碼。首先使用RGB空間,這是一半好,但切換到HSV空間的結果是混亂!HSV空間中的Android OpenCV顏色檢測

這是我的代碼

Mat A = src; 
    Mat B = dst; 
    Imgproc.cvtColor(A, A, Imgproc.COLOR_RGB2HSV,3); 
    Size sizeA = A.size(); 
    for (int i = 0; i < sizeA.height; i++) 
     for (int j = 0; j < sizeA.width; j++) { 
      double[] data = A.get(i, j); 
      if (data[0]>=95 && data[0]<=130 & data[1]>=150 && data[1]<=255 & data[2]<=150 && data[2]<=255){ 
       data[0] = 120; 
       data[1] = 255 ; 
       data[2] = 255 ; 
      } 
      else 
        data[0] = 100; 
        data[1] = 255; 
        data[2] = 255; 
       B.put(i, j, data); 
     } 
    Imgproc.cvtColor(B, B, Imgproc.COLOR_RGB2RGBA, 4);} 
} 

什麼不對的代碼?這種方法運行緩慢。爲什麼?

(我新來的Android和OpenCV)

TNX

回答

0

你或許應該從BGR(未RGB)到HSV轉換,但是這取決於你的這個代碼片段

Imgproc.cvtColor(A, A, Imgproc.COLOR_BGR2HSV,3); 

前檢查你的陳述,並始終使用&&(你有時使用&

你應該從HSV轉換爲RGB和然後到RGBA

Imgproc.cvtColor(B, B, Imgproc.COLOR_HSV2RGB, 3);} 
Imgproc.cvtColor(B, B, Imgproc.COLOR_RGB2RGBA, 4);} 
+0

Tnx,&&爲兩個其他值之間的值,如b:a

+0

您將double放入無符號字符中 – Miki

+0

如果是雙倍值,則使用[0,1]中的值,而不是[0,255] – Miki