我正在尝试将图像加载到位图中,以便我可以在相机框架上进行一些处理,但是当我尝试使用静态图像时,我一直得到bmp == null。 这是我的代码:
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
String path = Environment.getExternalStorageDirectory().getAbsolutePath();
File file = new File(path,"/myopencv/myimage.bmp");
if (file.exists()) {
objectbmp = BitmapFactory.decodeFile(path);
object = new Mat();
Log.e("Get frame","next line generates the error: bmp == null");
Utils.bitmapToMat(objectbmp, object);
}
}
所以我使用Eclipse向物理设备打开DDMS。我在/ storage / sdcard0 /中创建了一个新文件夹myopencv。然后我使用Eclipses工具将myimage.bmp文件放在那里(将文件推送到设备上)。 所以文件显然存在。 我也测试它,看文件是否存在,它似乎存在。 那为什么它是空的? 我怎样才能正常工作?
答案 0 :(得分:0)
如果您的文件确实存在,我只能猜测objectbmp
无效。Docs说:
bmp - 是“ARGB_8888”或类型的有效输入Bitmap对象 'RGB_565'。
为什么不使用Highgui.imread?文件说:
从文件中加载图像。
函数imread从指定文件加载图像并返回 它。如果图像无法读取(因为文件丢失,不正确 权限,不支持或无效格式),该函数返回一个 空矩阵(Mat.data == NULL)。目前,以下文件格式 支持:
Windows位图 - * .bmp,* .dib(始终支持)JPEG文件 - * .jpeg, * .jpg,*。jpe(参见 Notes 部分)JPEG 2000文件 - * .jp2(参见 Notes 部分)便携式网络图形 - * .png(参见 Notes 部分)便携式图像格式 - * .pbm,* .pgm,* .ppm(始终支持)Sun栅格 - * .sr,* .ras(始终支持)TIFF文件 - * .tiff,* .tif(参见注释部分)