C++ OpenCV imread在Android中不起作用

4nd*_*o1d 4 c++ android opencv imread

我试图在我的C++代码中读取图像

LOGD("Loading image '%s' ...\n", (*inFile).c_str());;
Mat img = imread(*inFile, CV_LOAD_IMAGE_GRAYSCALE);
CV_Assert(img.data != 0);
Run Code Online (Sandbox Code Playgroud)

并获得以下输出:

09-25 17:08:24.798: D/IRISREC(12120): Loading image '/data/data/com.example.irisrec/files/input/osoba1.jpg' ...
09-25 17:08:24.798: E/cv::error()(12120): OpenCV Error: Assertion failed (img.data != 0) in int wahet_main(int, char**), file jni/wahet.cpp, line 4208
Run Code Online (Sandbox Code Playgroud)

该文件存在.但奇怪的是,如果我尝试使用根文件浏览器预览图像,它只是黑色.我手动复制了文件.

编辑:

该代码在Windows下以.png和.jpg格式正常工作.我只是想将现有的Iris C++ C++项目移植到Android上.

kar*_*lip 6

imread()根据文件的内容而不是文件扩展名确定文件类型.如果文件的标头已损坏,则该方法失败是有意义的.

以下是您可以尝试的一些事项:

  • 将这些图像复制回计算机,看看是否可以通过其他应用程序打开它们.它们有可能在设备中被破坏;
  • 确保该位置有一个文件,并且您的用户有权阅读该文件;
  • 测试图像类型(jpg,png,tiff,bmp,...);

  • 出于测试目的,更直接的做法总是更好.摆脱inFile:

例:

Mat img = imread("/data/data/com.example.irisrec/files/input/osoba1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
if (!img.data) {
    // Print error message and quit
}
Run Code Online (Sandbox Code Playgroud)


4nd*_*o1d 1

我只能通过复制代码中的图像文件来解决这个问题。我首先将它们存储在我的资产文件夹中,然后按照本示例将它们复制到内部存储中。如果有人可以向我解释这一点,请这样做。