2016-07-02 3 views
0

У меня есть пороговое изображение в Android на основе определенных минимальных и максимальных значений H, S и V. Я делаю это следующим образом.Порог цвета в Android (с использованием OpenCV)

Mat raw=new Mat(); 
Mat hsv=new Mat(); 
org.opencv.android.Utils.bitmapToMat(bitmap, raw); 
Imgproc.cvtColor(raw, hsv, Imgproc.COLOR_RGB2HSV); 
Imgproc.cvtColor(raw, raw, Imgproc.COLOR_RGB2GRAY); 
Mat thresh = new Mat(raw.size(), CvType.CV_8UC1); 
for(int x=0;x<raw.cols();x++) 
{ 
    for(int y=0;y<raw.rows();y++) 
    { 
     double[] data = hsv.get(y,x); 
     double H = data[0]; 
     double S = data[1]; 
     double V = data[2]; 
     if(H_MIN<=H && H<=H_MAX && S_MIN<=S && S<=S_MAX && V_MIN<=V && V<=V_MAX) { 
      data = new double[] {255}; 
      thresh.put(y,x, data); 
     } 
     else 
     { 
      data = new double[] {0}; 
      thresh.put(y,x, data); 
     } 
    } 
} 

Это прекрасно работает, но занимает много времени для большого изображения. Есть ли более быстрый и эффективный способ сделать это? (Есть ли функция в OpenCV для этого, может быть?)

В Python я мог бы просто сделать следующее, используя numpy, что довольно быстро.

img = cv2.imread(name,1) 
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 
h = hsv[:,:,0] 
s = hsv[:,:,1] 
v = hsv[:,:,2] 

mask = np.zeros((img.shape[0],img.shape[1]), dtype='uint8') 
mask[((h >= minH) & (h <= maxH) & (s >= minS) & (s <= maxS) & (v >= minV) & (v <= maxV))] = 255 
+0

попытаться получить/поместить данные изображения за строку вместо пикселя, что ускорит выполнение. – hariprasad

ответ

0

Там библиотечная функция в OpenCV делать именно то, что вы делаете inRange(Mat src, Scalar lowerBound, Scalar upperBound, Mat dest).

Mat raw=new Mat(); 
Mat hsv=new Mat(); 
org.opencv.android.Utils.bitmapToMat(changedBitmap, raw); 
Imgproc.cvtColor(raw, hsv, Imgproc.COLOR_RGB2HSV); 
Imgproc.cvtColor(raw, raw, Imgproc.COLOR_RGB2GRAY); 
double maxH = 0; 
Mat thresh = new Mat(); 
Core.inRange(hsv, new Scalar(H_MIN, S_MIN, V_MIN), new Scalar(H_MAX, S_MAX, V_MAX), thresh); 
Смежные вопросы