安卓上的 OpenCV,Mat.rows() = 0

Posted

技术标签:

【中文标题】安卓上的 OpenCV,Mat.rows() = 0【英文标题】:OpenCV on android, Mat.rows() = 0 【发布时间】:2018-09-28 19:26:11 【问题描述】:

我有一个 Uri 指向我选择的图像。我想将图像存储在 Mat 变量中,对其进行编辑并将其显示在 ImageView 中。到目前为止,我只想将图像加载到 Mat 变量中,并显示它,无需编辑。这是我的代码:

Uri uri = data.getData();

Mat image = Imgcodecs.imread(uri.getPath());

//several edits in future

Bitmap resultBitmap = Bitmap.createBitmap(image.rows(), image.cols(),Bitmap.Config.ARGB_8888);
Utils.matToBitmap(image, resultBitmap);
imageView.setImageBitmap(resultBitmap);

给出错误的行是Bitmap resultBitmap = Bitmap.createBitmap(image.rows(), image.cols(),Bitmap.Config.ARGB_8888);,并表示image.rows()image.cols() 不能是0

如果维度是 (0, 0) 会出错,但我不知道为什么它们是 0。

【问题讨论】:

很可能imread 失败了,因为发生这种情况时它会返回一个空图像。 我怎么知道?我应该如何着手修复它?谢谢,洛伦佐 调用Matempty方法。 【参考方案1】:

问题是我向imread 传递了错误的URI,因此失败并返回了一个空的Mat。正如Dan Mašek 建议的那样,我调用了empty 方法,该方法返回了true,但我发现我传递了错误的URI。

【讨论】:

以上是关于安卓上的 OpenCV,Mat.rows() = 0的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV c++ Mat MADNESS

如何使函数可以在 OpenCV 中处理不同类型的图像

矩阵型 OpenCV

Mat,ml opencv中的训练数据

从opencv中的像素数组创建矩阵

vc++如何实现屏幕监控画面自适应?