首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在openCV中,棕色的HSV值范围是多少?

在openCV中,棕色的HSV值范围是多少?
EN

Stack Overflow用户
提问于 2017-09-08 16:45:52
回答 2查看 14K关注 0票数 2

我是openCV的新手。我已经能够用蒙版计算图像的绿色和黄色像素了。我想知道布朗在openCV的HSV范围是多少。

代码语言:javascript
运行
复制
    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,它甚至无法检测到黄色的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-08 17:43:20

您可以查看my answer here,它深入介绍了如何绘制/查看一系列不同的HSV值。

你也可以查看外部网站,这些网站可以让你玩弄价值,了解色彩空间。在HSV中,棕色对应于较高的饱和度级别(较低的值变得更灰)和中值级别(较低的值表示黑色,较高的值表示白色),色调介于(大致) 20度到40度之间(对于微红的砖块颜色)到40度(对于沙子颜色)。但在OpenCV中,色调度数被除以2,以使其适合255以下,因此色调值更接近于10到20。

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

这似乎包含了大多数关于棕色的概念,但如果你想显示一些更暗、更亮、更灰的值,你可以玩玩这些值。

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

另一种处理值的方法是使用OpenCV创建跟踪条,给出所有最小和最大阈值,并在每次更改值时使用阈值图像更新屏幕。我在python和OpenCV中对此也进行了built a tool。您可以在here中看到它的一小部分gif

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

票数 5
EN

Stack Overflow用户

发布于 2017-09-08 22:09:23

另外,从Wiki:颜色坐标

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

所以“理想”的Open CV Hue值是15,因为Hue for OpenCV 8-bit images is Hue/2,所以30 / 2 = 15。对于S饱和度也是100%,意味着255 (因为255是Scalar通道在Open CV中的最大值),对于V值是59%,对于平均值(59 / 100) * 255 = 150对于Scalar通道。所以,“理想的”棕色Scalar()是:

代码语言:javascript
运行
复制
Scalar ideal_brown = new Scalar(15,255,150);

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

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

2)为“更绿”的彩色像素增加一些色调;

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

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

5)将一些值添加到“更亮”像素的值。

所以,

代码语言:javascript
运行
复制
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>);

另外,看看Mikithis answer。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46112326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档