C OpenCV imread在Android中不起作用

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

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

并获得以下输出:

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

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

编辑:

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

解决方法:

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
}
上一篇:解决from scipy.misc import imread中出现ImportError:No module named 'imread'


下一篇:opencv学习之显示图像-imshow函数