java - 无法使用 OpenCV 加载图像

标签 java android opencv javacv

我尝试在Android上使用OpenCV中的Imgcodecs.imread来加载位于drawable文件夹中的图像,但是当我检查图像的数据时,它是null.

这是我加载图像的简单代码:

public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
    mImageRGBA = inputFrame.rgba();

    img_object = Imgcodecs.imread("D:\\Project_Android\\Car_Tracking_1\\app\\src\\main\\res\\drawable\\rear_of_car.png");
    Log.i("aaa2", img_object.dump());

    return mImageRGBA;
}

这是该函数的 logcat 信息:

06-26 00:27:15.056 24939-25059/com.example.bruce.car_tracking_1 I/aaa2: []

enter image description here

我在这里做错了什么?难道是我找的路径不对?或者我加载图像不正确?

已解决:

大家好,我通过另一种方式解决了我的问题。非常感谢 Sturkmen 的尝试帮助

我使用从可绘制文件夹加载图像,该图像是位图并将其显示在屏幕中,然后将其转换为 Mat 以进一步使用它。 :) 这是我的完整代码。

首先,创建2个全局变量

ImageView imageview;
Bitmap icon;

那么,

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        switch (status) {
            case LoaderCallbackInterface.SUCCESS:
            {
                Resources res = getResources();
                icon = BitmapFactory.decodeResource(res, R.drawable.rear_of_car);// get data from drawable folder 
                imageview.setImageBitmap(icon); // show data in imageview of screen
                mOpenCvCameraView.enableView();
            } break;
            default: {super.onManagerConnected(status);} break;
        }
    }
};

public void onCameraViewStarted(int width, int height) {
    img_object = new Mat(157, 140, CvType.CV_8UC1);
}

public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
    mImageRGBA = inputFrame.rgba();
    Utils.bitmapToMat(icon, img_object);//convert image bitmap to Mat to use it futher
    Log.i("aaa", String.valueOf(img_object.cols()));
    Log.i("aaa1", String.valueOf(img_object.rows()));
    return mImageRGBA;
}
public void onCameraViewStopped() {
    img_object.release();
}

记住在activity_main.xml中添加 ImageView

    <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageView"
    android:layout_alignParentBottom="true" />

并将图像放入可绘制文件夹

enter image description here

最佳答案

为了确保您的路径有效,请尝试编写测试图像

Mat test = new Mat(3,3,0);
Imgcodecs.imwrite("D:\\Project_Android\\Car_Tracking_1\\app\\src\\main\\res\\drawable\\test.png",test);

如果您可以保存图像,您也可以加载它。

编辑: 你也可以尝试像

public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mImageRGBA = inputFrame.rgba();

img_object = Imgcodecs.imread("D:\\Project_Android\\Car_Tracking_1\\app\\src\\main\\res\\drawable\\rear_of_car.png");
Imgcodecs.imwrite("D:\\Project_Android\\Car_Tracking_1\\app\\src\\main\\res\\drawable\\test.png",img_object);
Log.i("aaa2", img_object.dump());

return mImageRGBA;

}

编辑2:

请尝试

img_object = Imgcodecs.imread("D:\\Project_Android\\Car_Tracking_1\\app\\src\\main\\res\\drawable\\rear_of_car.png");
Imgcodecs.imwrite("D:\\Project_Android\\Car_Tracking_1\\app\\src\\main\\res\\drawable\\test.png",img_object);

而不是

Mat test = new Mat(3,3,0);
Imgcodecs.imwrite("D:\\Project_Android\\Car_Tracking_1\\app\\src\\main\\res\\drawable\\test.png",test);

关于java - 无法使用 OpenCV 加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38031152/

相关文章:

java - 哈希集作为可变副本传递

java - Hibernate与不同数据库MySQL的复制

java - 从 hashmap 打印一个值到屏幕 - 一次打印多个值?

android - AndEngine GLES2 调整大小后 Sprite 质量低

image - 图像拼接的一些问题——单应性?

python - 将捕获的视频帧(numpy 数组对象)从网络摄像头传递到 caffe 模型

c++ - 使用 OpenCV 调整图像数组的大小

用于 JodaTime 库的 GlassFish 上的 NetBeans jersey Restful Web 服务中的 java.lang.NoClassDefFoundError

android - SimpleCursorAdapter 的替代品?

java - 在 Android 的 Java 中,它更快更高效