我是openCV的新手。我已经能够用蒙版计数图像的绿色和黄色像素。我想知道openCV中Brown的HSV范围是多少。

    private void testBrownPixelCount(Mat originalMat) {
    if(isMatEmpty(originalMat)){
        Log.i(TAG, "Empty Original Mat at testBrownPixCoutn()");
    }else{
        //Perform:
        Mat maskMat = Imgcodecs.imread(testFilePath);
        Mat bgr = new Mat();
        Imgproc.cvtColor(maskMat, bgr, Imgproc.COLOR_BGR2RGB);
        Mat maskMatHsv = new Mat();
        Imgproc.cvtColor(bgr, maskMatHsv , Imgproc.COLOR_RGB2HSV);

        //iF NOt; use RGB2HSV:
        Mat brownMat = new Mat();
        Scalar min_brown = new Scalar(20,100,100);
        Scalar max_brown = new Scalar(30,255,255);
        Core.inRange(maskMatHsv, min_brown, max_brown, brownMat);
        Log.i(TAG, "Brown Mat Non-zeros:" + Core.countNonZero(brownMat));

        Bitmap bitmapMat = Bitmap.createBitmap(brownMat.cols(), brownMat.rows(), Bitmap.Config.ARGB_8888);
        Utils.matToBitmap(brownMat, bitmapMat);
        imgView_testView.setImageBitmap(bitmapMat);

    }

结果为黑色imageView,甚至无法检测到黄色。

最佳答案

您可以查看我的答案here,它详细介绍了如何绘制/查看一系列不同的HSV值。

您还可以查看外部站点,使您可以使用值来了解颜色空间。在HSV中,棕色对应于较高的饱和度水平(较低的值变为更多的灰色)和中间值水平(较低的为黑色,较高的为白色),并且色相介于(大约)红砖色的20度到40°的色度之间。沙色。但是在OpenCV中,将色度除以2以使其适合255以下,因此色度值更像是10到20。

使用链接的答案中的代码,我在HSV中生成了此gif,其中包含一系列从[10, 100, 20][20, 255, 200]的棕色值:

java - openCV中棕色的HSV值范围是多少?-LMLPHP

这似乎涵盖了大多数棕色的想法,但是如果您想显示一些更深,更亮,更灰色等值,则可以使用这些值。

寻找良好阈值的另一种方法是创建一个程序,让您对其进行尝试。例如,我在python和OpenCV中使用built a tool类似于photoshop中的魔术棒选择器,它使您可以定义阈值,单击像素,并且它将选择与单击位置相关的相似颜色的像素。该工具将打印出最高和最低颜色值,还将打印平均颜色和标准偏差,以便更好地控制与您选择的颜色相似的阈值。您会看到一些正在使用的gif here

处理值的另一种方法是使用OpenCV创建轨迹栏,提供所有最小和最大阈值,并在每次更改值时使用阈值图像更新屏幕。我在python和OpenCV中也为此built a tool。您会看到一些正在使用的gif here

如果仔细阅读这两个项目的代码,您将了解如何构建类似的程序来使用值作为玩具,以更轻松地在不同的色彩空间中工作。

10-04 16:54