【问题标题】:OpenCV: how to change color of all non transparent pixels to black?OpenCV:如何将所有非透明像素的颜色更改为黑色?
【发布时间】:2020-11-07 04:52:06
【问题描述】:

我使用 OpenCV (Java),我想将 Mat 中所有非透明像素的颜色更改为黑色(在 ARGB_8888 中定义的颜色,但可能是另一种格式)

我该怎么做?

  Mat mat = new Mat();
  bmp32 = bitmap.copy(Bitmap.Config.ARGB_8888, true);
  Utils.bitmapToMat(bmp32, mat);
// and then ????

谢谢!

【问题讨论】:

    标签: java android opencv opencv4android


    【解决方案1】:
    // allocate space as mixChannels requires so
    Mat bgr = new Mat(mat.size(), CvType.CV_8UC3);
    Mat alpha = new Mat(mat.size(), CvType.CV_8U);
    List<Mat> src = new ArrayList<Mat>();
    src.add(mat);
    List<Mat> dst = new ArrayList<Mat>();
    dst.add(alpha);
    dst.add(bgr);
    // A->alpha, RGB->bgr in reverse order
    MatOfInt fromTo = new MatOfInt(0,0, 1,3, 2,2, 3,1);
    mixChannels(src, dst, fromTo);
    
    // now, make non-transparent parts black
    Mat mask;
    compare​(alpha, Scalar(0), mask, opencv_core.CMP_EQ);
    Mat res;
    Core.bitwise_and(bgr, bgr, res, mask);
    

    【讨论】:

    • 我没有测试过代码,对Java不熟悉,如有错误请随时编辑。
    • 谢谢!我已经用 MatOfInt 为 fromTo 更新了你的代码。 “Mat mask = alpha == 0;”仍然有错误:“运算符'=='不能应用于'org.opencv.core.Mat','int'”知道如何纠正这一行吗?非常感谢!
    • @Regis_AG 也许Mat mask = alpha == Scalar(0); 有效。我已经编辑了代码。
    • 试过“Mat mask = alpha == new Scalar(0);”错误:“运算符'=='不能应用于'org.opencv.core.Mat','org.opencv.core.Scalar'”还有其他想法吗?我不知道...
    • @Regis_AG 你试过compare函数吗,就像上次编辑一样?
    猜你喜欢
    • 2021-01-27
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2014-05-27
    相关资源
    最近更新 更多