You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android初始化Mat时抛出width and height must be >0异常求助

解决Bitmap.createBitmap抛出IllegalArgumentException(宽高必须>0)的问题

兄弟,你这崩溃的原因一眼就能看出来——你创建的Mat imgRgba是空的!它的宽和高都是0,调用Bitmap.createBitmap的时候自然就触发参数非法的异常了。

先看你初始化Mat的代码:

Mat imgRgba = new Mat();

这行代码只是创建了一个空的Mat对象,它还没有任何图像数据,所以imgRgba.width()/cols()和imgRgba.height()/rows()返回的都是0,这就导致Bitmap.createBitmap直接报错。

给你两个关键的解决步骤:

1. 先确保Mat对象有实际的图像数据

在调用Bitmap创建方法之前,你得先让imgRgba加载或者接收真实的图像内容,比如:

  • 如果是相机帧处理场景:先把相机输入的帧(比如灰度Mat)转换为RGBA格式,填充到imgRgba里
    // 假设inputMat是相机回调获取到的原始帧
    Mat imgRgba = new Mat();
    Imgproc.cvtColor(inputMat, imgRgba, Imgproc.COLOR_GRAY2RGBA);
    // 此时imgRgba就有了和inputMat一样的宽高
    
  • 如果是手动初始化Mat:直接指定宽高和格式
    // 创建一个480x640的RGBA格式Mat
    Mat imgRgba = new Mat(480, 640, CvType.CV_8UC4);
    

2. 加个安全判断避免崩溃

就算你确保了Mat会被填充数据,也建议加个判断,防止极端情况下的崩溃:

Mat imgRgba = new Mat();
// 先完成imgRgba的图像数据填充...

if (imgRgba.cols() > 0 && imgRgba.rows() > 0) {
    final Bitmap bitmap = Bitmap.createBitmap(imgRgba.cols(), imgRgba.rows(), Bitmap.Config.RGB_565);
    Utils.matToBitmap(imgRgba, bitmap);
    // 这里写你使用bitmap的逻辑
} else {
    // 处理Mat为空的情况,比如打个日志提示
    Log.e("BitmapError", "Mat对象没有有效尺寸,无法创建Bitmap");
}

另外提一句:Mat.width()和Mat.cols()是完全等价的,Mat.height()和Mat.rows()也是一样的,所以你之前两种写法都没问题,核心还是要保证Mat有实际的尺寸。

内容的提问来源于stack exchange,提问作者Pooja Patwa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:03:49