【发布时间】:2020-10-27 19:14:07
【问题描述】:
信息
我有一个 Android NDK / OpenCV 项目(运行原生 c++ 代码)。
我正在尝试将图像加载到 NDK,因此我将图像加载为位图,以便获取它的路径。
我不想将整个图像传递给 NDK(如this answer、this answer 或其他),我只想将一个字符串(例如图像路径)或一个指针或类似的东西传递给 NDK,并且使用 OpenCV 从 NDK 读取图像。
我尝试使用OpenCV's Face Detection example 作为参考,但它并没有真正做到我想要做的事情。
为了在 Java 中获取路径字符串,我尝试了这个:
Uri uri = data.getData();
String imagePath = uri.getEncodedPath();
或者这个:
Cursor imageCursor;
int imageNameIndex, imageSizeIndex;
Uri uri = data.getData();
imageCursor = getContentResolver().query(uri, null, null, null, null);
imageNameIndex = imageCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
String imagePath = imageCursor.getString(nameIndex);
或者说:
String imageFullPath = Environment.getExternalStorageDirectory() + "/Pictures/" + imagePath;
或者说:
String imageFullPath = Environment.DIRECTORY_PICTURES + "/" + imagePath;
这让我得到了/storage/emulated/0/Pictures/my-image.jpg、Pictures/my-image.jpg、my-image.jpg 或 /document/image%3A167 之类的字符串。
然后我将字符串传递给 NDK(将其转换为 char *)并尝试使用 OpenCV 的 imread 在 C++ 上加载图像:
Mat image = imread(image_path, IMREAD_COLOR);
所有上述试验都会产生一个空的Mat 对象(所有int 值都等于0 并且指针都是NULL)。
我也尝试过使用指针的类似方法。
问题
这是一个 OpenCV 问题吗?我应该以某种方式初始化Mat吗?
如果不是,我应该将什么字符串/指针传递给 NDK 以便它可以加载图像?
【问题讨论】:
标签: android android-studio opencv image-processing android-ndk