【问题标题】:OpenCV merge two masksOpenCV 合并两个掩码
【发布时间】:2014-10-15 01:30:30
【问题描述】:

我想通过“setTo()”将两个掩码合并在一起。但是我得到一个错误,我不知道为什么。

_第一个掩码是输入视频帧(RGBA实际上是inRange的黑白原因) _ 第二个面具是一个简单的黄色面具(8UC4 我认为它必须是)

Imgproc.cvtColor(rgba, rgba, Imgproc.COLOR_RGB2HSV, 0);
        Core.inRange(rgba,  new Scalar(10,100,100), new Scalar(30,255,255), rgba);

        Imgproc.cvtColor(rgba, rgba, Imgproc.COLOR_GRAY2RGBA, 4);
        Mat yellow_mask = new Mat(cols, rows, CvType.CV_8UC4, new Scalar(255,255,0, 100));
        rgba.setTo(yellow_mask, rgba);

我的目标是将白色 inRange 变成黄色。

编辑 1

// DETECT YELLOW 
        Mat hsv = new Mat();
        Imgproc.cvtColor(rgba, hsv, Imgproc.COLOR_RGB2HSV);

        Mat mask = new Mat();
        Core.inRange(hsv,  new Scalar(10,100,100), new Scalar(30,255,255), mask);

        rgba.setTo(new Scalar(255,255,0, 100), mask);

启动后每 15 秒检测一次崩溃:/

【问题讨论】:

    标签: android opencv colors merge mask


    【解决方案1】:
    • 首先,掩码是一个 8 位、单通道二值图像。
    • 那么,您可以永远从灰度或二值图像中检索颜色(想想它..)
    • 为每一步回收您的 rgba Mat - 坏主意。

    所以试试这样:

        Mat hsv = new Mat();
        Imgproc.cvtColor(rgba, hsv, Imgproc.COLOR_RGBA2HSV);
    
        Mat mask = new Mat();
        Core.inRange(hsv,  new Scalar(10,100,100), new Scalar(30,255,255), mask);
    
        rgba.setTo(new Scalar(255,255,0, 100), mask);
    

    【讨论】:

    • 我测试了你的代码,它比我更干净,谢谢!但是(我返回 rgba 对吗?),我仍然遇到错误:/
    • 好吧,你忘了替换 rgba 现在它也能正常工作了。我现在只需要刷它们
    • 别担心,它有效。我刚刚发布了使用过的口罩:)
    猜你喜欢
    • 2016-03-04
    • 1970-01-01
    • 2021-07-31
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2016-01-19
    • 1970-01-01
    相关资源
    最近更新 更多