Search code examples
javaandroidopencvjavacv

Can't load image with OpenCV


I tried to use Imgcodecs.imread from OpenCV on Android to an load image which is located in the drawable folder, but when I check the data of the image, it is null.

This is my simple code to load image:

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;
}

This is the logcat info from that function:

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

enter image description here

What am I doing wrong here? Am I finding the path incorrectly? Or am I loading the image incorrectly?

SOLVED:

Hello all i solved my problem by another way. So many thank to sturkmen for your attempt help

I use load image from drawable folder, this image is a bitmap and show it in screen and then i convert it to Mat to use it futher. :) Here is my complete code.

first,create 2 global variable

ImageView imageview;
Bitmap icon;

Then,

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();
}

remember add Image view in activity_main.xml

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

and put your image to drawable folder

enter image description here


Solution

  • to be sure that your path is valid try to write a test image

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

    if you can save the image you can also load it.

    edit: also you can try like

    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;
    

    }

    edit 2:

    please try

    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);
    

    instead of

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