2017-08-07 37 views
0

次のコードは、中央のピクセルを読み取り、私が仮定した値がH = data[0], S data[1], V = data[2]である場合、HSV値の上限と下限をどのように取得しますか?OpenCV:色の上限と下限の検索HSV

参考:私が読んでいるカラーピクセルはグリーンです。

E /データ:H:9​​0.0 S:113.0 V: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); 

はまた、次の3行のコードを追加することによって、私は、ビットマップ== nullのを言って、エラーを受け取りますだから、ピクセル読書がうまくいかなかったかどうかわからない。 enter image description here

+0

色の上限と下限を見つけることは平均色を見つけることと同じではありません。 –

+0

[this](https://stackoverflow.com/a/28542584/6950238)の回答をご覧ください。 –

答えて

1

をするだけImgproc.cvtColor()方法でHSVモデルにMatを変換します: - (Mat.get(int,int)方法)の各画素の上にmin/max色相値を見つけたより

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

私が読んでいる

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

画像HSVモデルの色の下限と上限はminmaxです。

NB! Hue for OpenCV 8-bit images is Hue/2 "正常"モデルの色相値は0〜360の間で、255より大きい - 最大値はバイトのためです。したがって、あなたが "普通の" HSVモデル(Android OpenCVではHSVではない)の色範囲が必要な場合は、2を掛けます。

関連する問題