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

时间:2017-09-08 08:45:52

标签: java android opencv image-processing

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

2 个答案:

答案 0 :(得分:3)

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

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

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

Brown values

这似乎包含了大多数棕色的想法,但是如果你想要出现更暗,更浅,更灰,等等,你可以玩这些值。

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

使用值的另一种方法是使用OpenCV创建轨迹栏,提供所有最小和最大阈值,并在每次更改值时使用阈值图像更新屏幕。我也是built a tool在python和OpenCV中。您可以看到使用here gif的{​​{1}}。{/ p>

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

答案 1 :(得分:0)

此外,来自Wiki:颜色坐标

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

如此“理想”BROWN的开放CV H ue值为15,因为Hue for OpenCV 8-bit images is Hue/2,所以30 / 2 = 15 S aturation的100%意味着255(因为255是开放CV中Scalar频道的最大值),而 V 的最大值为59%对于Scalar频道,表示(59/100)* 255 = 150。所以,“理想的”布朗Scalar()是:

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

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

1)从Hue中减去“更多红色”彩色像素的一些值;

2)为Hue添加一些“更绿”彩色像素值;

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

4)从“值更深”像素的值中减去一些值;

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

所以,

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回答。