OpenCV合并两个掩码

时间:2014-08-21 12:05:05

标签: android opencv colors merge mask

我想通过“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次检测到崩溃:/

1 个答案:

答案 0 :(得分:1)

  • 首先,掩码是一个8位,一个通道的二进制映像。
  • 然后,您可以永远从灰度或二进制图像中检索颜色(想一想......)
  • 为你的每一步回收你的rgba垫 - 不好主意。

所以试试这样:

    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);