【问题标题】:OpenCV: Finding the upper and lower bounds for a color HSVOpenCV:查找颜色 HSV 的上限和下限
【发布时间】:2017-08-10 02:10:30
【问题描述】:

以下代码读取中心的像素并返回三个值,我认为是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);

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

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

我正在阅读的图片:

【问题讨论】:

  • 查找颜色的上下界与查找平均颜色不同。
  • 看看this的回答。

标签: android opencv


【解决方案1】:

只需使用Imgproc.cvtColor() 方法将Mat 转换为HSV 模型:

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

比在每个像素上找到min/max 色调值(使用Mat.get(int,int) 方法) - 那就是minmax 将是答案:HSV 模型中颜色的下限和上限。

注意! Hue for OpenCV 8-bit images is Hue/2 因为“正常”模型中的色调值介于 0 和 360 之间,并且大于 255 - 字节的最大值。因此,如果您需要“正常”HSV 模型的颜色范围(不是 Android OpenCV 的 HSV),您应该将其乘以 2。

【讨论】:

    猜你喜欢
    • 2021-11-12
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多