2017-08-07 469 views
0

以下代碼讀取中心的像素並返回了三個我認爲是H = data[0], S data[1], V = data[2]的值,如何獲得HSV值的上限和下限?OpenCV:找到HSV顏色的上下界

注意:我正在閱讀的彩色像素是綠色。

E /數據:H:90.0 S:113.0五:144.0

if (getIntent().hasExtra("byteArray")) { 

      bitmap = BitmapFactory.decodeByteArray(getIntent().getByteArrayExtra("byteArray"), 0, getIntent().getByteArrayExtra("byteArray").length); 

      int width= bitmap.getWidth(); 
      int height=bitmap.getHeight(); 

      int centerX=width/2; 
      int centerY=height/2; 
      srcMat = new Mat(); 
      Utils.bitmapToMat(bitmap, srcMat); 
      Imgproc.cvtColor(srcMat, srcMat, Imgproc.COLOR_BGR2HSV); 
      srcMat.convertTo(srcMat, CvType.CV_64FC3); //http://answers.opencv.org/question/14961/using-get-and-put-to-access-pixel-values-in-java/ 
      double[] data = srcMat.get(centerX, centerY); 
      Log.e("data", String.valueOf("H:"+data[0]+" S:"+data[1]+" V:"+data[2])); 
      Log.e("dlength", String.valueOf(data.length)); 
      Mat matHSV = new Mat(0,0,CvType.CV_64FC3); 

另外通過添加以下三行代碼,我會收到一個錯誤說位圖== NULL,所以即時通訊並不確定像素閱讀是否有效。

matHSV.put(0,0,data); 
Utils.matToBitmap(matHSV, bb); 
imgDisplay.setImageBitmap(bb); 

圖片我讀: enter image description here

+0

查找顏色的上限和下限與查找平均顏色不同。 –

+0

看看[this](https://stackoverflow.com/a/28542584/6950238)的答案。 –

回答

1

只是轉換Mat到HSV模型Imgproc.cvtColor()方法:

Imgproc.cvtColor(hsvMat, hsvMat, Imgproc.COLOR_RGB2HSV); 

比發現在每個像素min/max色彩值(與Mat.get(int,int)法) - 那就是minmax將是答案:HSV模型中顏色的上下界。

注意! Hue for OpenCV 8-bit images is Hue/2,因爲「正常」模型中的Hue值介於0和360之間,且大於255 - 字節的最大值。因此,如果您需要「正常」HSV模型(不適用於Android OpenCV的HSV)的顏色範圍,則可以將其乘以2.