OpenCV:查找颜色HSV的上限和下限

时间:2017-08-07 07:34:22

标签: android opencv

以下代码读取中心的像素并返回三个值,我假设为H = data[0], S data[1], V = data[2],如何获得上限和下限HSV值?

注意:我读取的颜色像素为绿色。

  

E /数据:H:90.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);

另外,通过添加以下三行代码,我会收到一个错误,说位图== null,所以我不确定像素读数是否有效。

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

图片I'阅读: enter image description here

1 个答案:

答案 0 :(得分:1)

只需使用tf.metrics方法将 _, recall = tf.metrics.recall(y, y_ ) _, precision = tf.metrics.precision(y, y_) v_rec = tf.summary.scalar('recall', recall) v_prec = tf.summary.scalar('precision', precision) 转换为HSV模型:

Mat

在每个像素上找到Imgproc.cvtColor() Hue值(使用Imgproc.cvtColor(hsvMat, hsvMat, Imgproc.COLOR_RGB2HSV); 方法) - 那样min/maxMat.get(int,int)就是答案:a的下限和上限HSV模型中的颜色。

NB! Hue for OpenCV 8-bit images is Hue/2因为Hue值在"正常" model在0到360之间,并且大于255 - byte的最大值。因此,如果您需要颜色范围为"正常" HSV模型(不是Android OpenCV的HSV),你把它乘以2。