gpt4 book ai didi

java - OpenCV-Android : Import . png 保留空白区域的透明度

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:37 25 4
gpt4 key购买 nike

我目前正在尝试将输入的 .png 文件转换为 OpenCV:Mat,在空白区域保留其透明度。在 eclipse 上工作,使用 openCV4Android。

我试过这个(使用 Drawable):

输入:

  • icon.png 是一个正确加载为 RGBA(4 channel )的资源文件。
  • Mat mcSprite(全局字段)。

    onCameraFrame method{
    try {
    mcSprite = Utils.loadResource(this, R.drawable.icon);
    System.out.println(mcSprite.empty());
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    Imgproc.resize(mcSprite, mZoomWindow, mZoomWindow.size());
    }

生成的图像:

Black Zones

PS:如果我导入使用:

mcSprite = Utils.loadResource(this, R.drawable.icon , -1);

>0 Return a 3-channel color image.
=0 Return a grayscale image.
<0 Return the loaded image as is (with alpha channel).

没有图像显示。

最佳答案

更快的解决方案,使用 mask :

    public Mat overlayImage(Mat background, Mat foreground)//, Point location)
{
Mat mask = new Mat();
Imgproc.resize(mCurrentMask, mask, background.size());

Mat source = new Mat();
Imgproc.resize(foreground, source, background.size());

source.copyTo(background,mask);
source.release();
mask.release();
return background;
}

public void createMask (Mat sprite){
mCurrentMask = new Mat(sprite.height(),sprite.width(),24);
double f[] = {1,1,1,0};
double e[] = {0,0,0,0};
for(int y = 0; y < (int)(sprite.rows()) ; ++y)
{
for(int x = 0; x < (int)(sprite.cols()) ; ++x)
{
double info[] = sprite.get(y, x);
if(info[3]>0) //rude but this is what I need
{
mCurrentMask.put(y, x, f);
}
else mCurrentMask.put(y, x, e);
}
}
}

关于java - OpenCV-Android : Import . png 保留空白区域的透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19397633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com