android opencv Utils.BitmapToMap 运行时异常帮助?

发布于 2024-12-13 14:48:36 字数 1302 浏览 0 评论 0原文

我正在尝试将位图中的 JPEG 转换为垫子。我知道 Utils 方法仅支持 RGB888 格式的图像,因此我强制相机采用 JPEG 格式,拍摄照片,解码并将其转换为 RGB 888 格式,然后调用 utils 方法从中获取垫子。这是基本代码:

Bitmap imageBitmap = BitmapFactory.decodeByteArray(mData, 0, mData.length);
double scale = 0.5; // Make the image smaller incase I was running out of memeory.
imageBitmap = Bitmap.createScaledBitmap(imageBitmap, (int) (imageBitmap.getWidth() * scale),
                    (int) (imageBitmap.getHeight() * scale), false);

imageBitmap = PNGtoRGB888(imageBitmap);
Mat m = Utils.bitmapToMat(imageBitmap); // I get a runtime exception

这是 PNGtoRGB888 方法:

private Bitmap PNGtoRGB888(Bitmap _img)
    {
        int numPixels = _img.getWidth() * _img.getHeight();
        int[] pixels = new int[numPixels];

        // Get Bitmap's pixels. Each int is the color values for one pixel.
        _img.getPixels(pixels, 0, _img.getWidth(), 0, 0, _img.getWidth(), _img.getHeight());

        // Create a Bitmap of the appropriate format.
        Bitmap result = Bitmap.createBitmap(_img.getWidth(), _img.getHeight(), Config.ARGB_8888);

        // Set RGB pixels.
        result.setPixels(pixels, 0, result.getWidth(), 0, 0, result.getWidth(), result.getHeight());
        return result;
    }

有什么想法为什么我会得到运行时异常吗?!?!?!?

I am trying to convert a JPEG that is in a bitmap to a mat. I know that the Utils method only supports images in RGB888 format so I take force my camera to be in JPEG format, take the picture, decode it and the convert it to RGB 888 format and then call the utils method to get a mat from it. Here is the basic code:

Bitmap imageBitmap = BitmapFactory.decodeByteArray(mData, 0, mData.length);
double scale = 0.5; // Make the image smaller incase I was running out of memeory.
imageBitmap = Bitmap.createScaledBitmap(imageBitmap, (int) (imageBitmap.getWidth() * scale),
                    (int) (imageBitmap.getHeight() * scale), false);

imageBitmap = PNGtoRGB888(imageBitmap);
Mat m = Utils.bitmapToMat(imageBitmap); // I get a runtime exception

Here is the PNGtoRGB888 method:

private Bitmap PNGtoRGB888(Bitmap _img)
    {
        int numPixels = _img.getWidth() * _img.getHeight();
        int[] pixels = new int[numPixels];

        // Get Bitmap's pixels. Each int is the color values for one pixel.
        _img.getPixels(pixels, 0, _img.getWidth(), 0, 0, _img.getWidth(), _img.getHeight());

        // Create a Bitmap of the appropriate format.
        Bitmap result = Bitmap.createBitmap(_img.getWidth(), _img.getHeight(), Config.ARGB_8888);

        // Set RGB pixels.
        result.setPixels(pixels, 0, result.getWidth(), 0, 0, result.getWidth(), result.getHeight());
        return result;
    }

Any ideas why I would get the runtime exception?!?!?!?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梨涡 2024-12-20 14:48:36

您可能想为 ImageBitMap 创建 SoftReference

SoftReference<BitMap> bimap = 
    new SoftRerenceBitmap<Bitmap>(BitmapFactory.decodeByteArray(
            mData, 0, mData.length);

You might want to create a SoftReference for ImageBitMap

SoftReference<BitMap> bimap = 
    new SoftRerenceBitmap<Bitmap>(BitmapFactory.decodeByteArray(
            mData, 0, mData.length);
梦里°也失望 2024-12-20 14:48:36

我必须重新组织我的构建路径并且它起作用了。

I had to reorganize my build path and it worked.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文