掩码进程后将透明像素转换为白色

时间:2016-10-28 15:13:51

标签: android opencv image-processing transparency

我正致力于光学标记识别。我的目的是从图像中提取红色圆圈并评估之后的黑色形状。检测红色圆圈并提取它们没有问题(图2),我成功地获得了红色像素透明的图像。问题是,当我将此图像转换为灰色时,透明像素变为黑色,因此在完成所有这些工作后没有任何变化(图片3)。我怎样才能将透明像素转换为白色或者我做错了什么?

    Mat masked = new Mat(src.size(), CvType.CV_8UC3, new Scalar(255, 255, 255));
    Mat hsv_image = new Mat();
    Imgproc.cvtColor(src, hsv_image, Imgproc.COLOR_RGB2HSV);

    // create mask starts
    Mat lower_red_hue_range = new Mat();
    Mat upper_red_hue_range = new Mat();
    Core.inRange(hsv_image, new Scalar(0, 70, 70), new Scalar(10, 255, 255), lower_red_hue_range);
    Core.inRange(hsv_image, new Scalar(160, 70, 70), new Scalar(179, 255, 255), upper_red_hue_range);
    Mat red_hue_mask = new Mat();
    Core.addWeighted(lower_red_hue_range, 1.0, upper_red_hue_range, 1.0, 0.0, red_hue_mask);
    Core.bitwise_not(red_hue_mask, red_hue_mask);
    Utils.saveAsBitmap(red_hue_mask);  // picture1
    // create mask ends

    // apply mask to src
    src.copyTo(masked, red_hue_mask);
    Utils.saveAsBitmap(masked); // picture2 -> now it has transparent pixels

    // convert to greyscale (transparent pixels become black :( )
    Imgproc.cvtColor(masked, mBlacked, Imgproc.COLOR_RGB2GRAY);
    Utils.saveAsBitmap(mBlacked); // picture3

picture src

picture 1-2-3

0 个答案:

没有答案