java - openCV 中 BROWN 颜色的 HSV 值范围是多少?

标签 java android opencv image-processing

我是 openCV 的新手。我已经能够计算带有 mask 的图像的绿色和黄色像素。我想知道 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。

使用链接答案中的代码,我生成了从 [10, 100, 20][20, 255, 200] 在 HSV 中:

Brown values

这似乎涵盖了棕色的大部分想法,但如果您想要一些更深、更亮、更灰等的颜色出现,您可以使用这些值。

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

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

如果您仔细阅读这两个项目的代码,您可以了解如何构建类似的程序来摆弄值,以便更舒适地在不同的色彩空间中工作。

关于java - openCV 中 BROWN 颜色的 HSV 值范围是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46112326/

相关文章:

java - 将对象与扩展第一个对象的另一个对象进行比较

java - Java 中的意外结果( float 为整数)

java - Android Studio 0.1.1 gradle 项目中的 Google Play 服务?

android - Eclipse android 设备选择器不显示我的手机

android - 进度条会减慢应用程序速度吗?

python - python3 ubuntu 14.04下安装opencv-python

java - 为什么公共(public)池的并行度与可用处理器的数量不同?

java - 字符串解析机制获取值

c# - OpenCV 的 Queryframe() 仅返回一帧

c++ - 人脸地标和使用光流稳定