2016-06-25 201 views
1

我試圖使用Android上的OpenCV中的Imgcodecs.imread加載位於可繪製文件夾中的圖像,但是當我檢查圖像的數據時,它是null無法使用OpenCV加載圖像

這是我簡單的代碼加載圖像:

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你的嘗試幫助

我使用可繪製文件夾中的加載圖像,這個圖像是一個位圖,並顯示在屏幕上,然後我將它轉換爲馬來使用它。 :)這是我的完整代碼。

第一,創建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 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/imageView" 
    android:layout_alignParentBottom="true" /> 

圖像視圖,把你的圖像繪製文件夾

enter image description here

+0

是目前在你的android系統中的路徑? Isnt android僅限於Linux操作系統? – Micka

+0

Hello Berriel,圖像路徑在可繪製文件夾中,在我的電腦中(不在SD卡或手機內存中)。我不明白第二個問題 – Bruce

回答

2

,以確保您的路徑是有效的嘗試寫一個測試圖像

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

嗨sturkmen,它的運行:)但我不知道爲什麼Mat測試不得不局部變量。我曾經使用這種方式,但我的墊子img_object是一個全局變量。它在public void onCameraViewStarted(int width,int height){img_object = new Mat(157,140,CvType。CV_8UC1); }和公共釋放onCameraViewStopped(){img_object.release();}請你用我的方式解釋,爲什麼它不運行? – Bruce

+0

@布魯斯對不起,我不熟悉JAVA環境。你能試試我編輯的答案並報告結果嗎? – sturkmen

+0

首先,我在logcat中看到Mat測試的數據,但是當我檢查它時,數據不是我的圖像,它只是一個白色點的後面圖像:(我仍然沒有得到我的圖像 – Bruce