2015-07-12 2 views
0

Я попытался написать цветной (зеленый) код обнаружения для Android (просмотр в реальном времени) в OpenCV. сначала используйте RGB-пространство, и это почти нормально, но при переключении на пространство HSV результатом является беспорядок!Обнаружение цвета Android OpenCV в пространстве HSV

это мой код

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);} 
} 

, что случилось с этим кодом? и этот метод работает медленно.

(я новых для андроида и OpenCV)

Tnx

ответ

0

Вы, вероятно, следует преобразовать из BGR (не RGB) к ВПГ, но это зависит от вашего кода перед этим фрагментом

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

Вы помещаете двойной символ без знака – Miki

+0

Если он двойной, используйте значение в [0,1], а не в [0,255] – Miki

Смежные вопросы