【问题标题】:What is the range of HSV values for BROWN color in openCV?openCV中棕色颜色的HSV值范围是多少?
【发布时间】:2017-09-08 22:17:54
【问题描述】:

我是 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,它甚至无法检测到黄色的。

【问题讨论】:

标签: java android opencv image-processing


【解决方案1】:

您可以查看我的回答 here,该回答深入了解了如何绘制/查看一系列不同的 HSV 值。

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

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

这似乎包含了棕色的大多数想法,但是如果您希望出现更暗、更亮、更灰等的颜色,您可以使用这些值。

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

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

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

【讨论】:

  • 我已经阅读了有关您对 HSV 值的深入解释的链接,我学到了很多东西。事实上,我认为有了这个解释,我可以自己测试 HSV 值。我真的很感激,请继续分享知识和帮助人们。
【解决方案2】:

另外,来自Wiki:颜色坐标

"HSV (h, s, v) (30°, 100%, 59%)",

所以“理想”打开简历H棕色的ue 值是15,因为Hue for OpenCV 8-bit images is Hue/2,所以30 / 2 = 15S饱和度为 100% 表示 255(因为 255 是 Open CV 中Scalar 通道的最大值),V 平均值为 59%(59 / 100) * 255 = 150 对于Scalar 频道。所以,“理想的”BROWN Scalar() 是:

Scalar ideal_brown = new Scalar(15,255,150);

要添加一些“接近棕色”的彩色像素,您可以:

1) 从色调中减去一些值以获得“更红”的彩色像素;

2) 为色调添加一些值以获得“更多绿色”彩色像素;

3) 从饱和度中减去“颜色较少”像素的一些值(您不能添加,因为 255 已经是最大值);

4) 从 Value 中减去一些值以获得“更暗”的像素;

5) 为“更轻”像素添加一些值。

所以,

Scalar min_brown = new Scalar(15-<delta1_for_hue>,255-<delta1_for_saturation>,150-<delta1_for_value>);
Scalar max_brown = new Scalar(15+<delta2_for_hue>,255,<delta2_for_saturation>,150+<delta2_for_value>);

另外,看看thisMiki 的回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 2020-07-26
    相关资源
    最近更新 更多