2013-08-07 36 views
11

Tôi chỉ muốn chuyển đổi một bitmap từ Android sang đối tượng Mat cho OpenCV. Chủ đề này thường được nhấn mạnh trên Stack Overflow. Ví dụ:Chuyển đổi bitmap của Android sang OpenCV Mat và ngược lại

convert Mat to Bitmap Opencv for Android;

convert Bitmap to Mat after capture image using android camera;

templateMatching mattoBitmap opencv for android

Thậm chí còn có nhiều thứ để tìm. Tôi đã làm theo các hướng dẫn trong câu trả lời này, nhưng tôi vẫn không thể làm được đúng cách.

mã tối thiểu:

//First convert Bitmap to Mat 
Mat ImageMat = new Mat (image.getHeight(), image.getWidth(), CvType.CV_8U, new Scalar(4)); 
Bitmap myBitmap32 = image.copy(Bitmap.Config.ARGB_8888, true); 
Utils.bitmapToMat(myBitmap32, ImageMat); 

//Do smth. 
Imgproc.cvtColor(ImageMat, ImageMat, Imgproc.COLOR_RGB2GRAY,4); 

//Then convert the processed Mat to Bitmap 
Bitmap resultBitmap = Bitmap.createBitmap(ImageMat.cols(), ImageMat.rows(),Bitmap.Config.ARGB_8888);; 
Utils.matToBitmap(ImageMat, resultBitmap); 

//Set member to the Result Bitmap. This member is displayed in an ImageView 
mResult = resultBitmap; 

(lưu ý: hình ảnh là một Bitmap cung cấp cho dòng mã này)

Lỗi:

08-07 15:13:59.188: E/AndroidRuntime(2115): FATAL EXCEPTION: main

08-07 15:13:59.188: E/AndroidRuntime(2115): java.lang.NoClassDefFoundError: org.opencv.core.Mat

Nhưng nhập khẩu của tôi là:

import android.graphics.Bitmap; 
import android.graphics.Bitmap.Config; 


//OpenCV 
import org.opencv.android.Utils; 
import org.opencv.core.CvType; 
import org.opencv.core.Mat; 
import org.opencv.core.Scalar; 
import org.opencv.imgproc.Imgproc; 

thực sự đánh giá cao bất kỳ loại trợ giúp nào. Cảm ơn DanS

+0

Một lỗi được tìm thấy: Quên để xuất lib opencv. (Im mới cho java) Lỗi mới là Lỗi UnsatisfiedLink như được lưu ý ở đây: http://stackoverflow.com/questions/11614227/android-unsatisfiedlinkerror-with-opencv-2-4-2 – DanS

+0

Bây giờ với liên kết được ghi chú phía trên mã hoạt động ! – DanS

+0

Nếu liên kết ở trên hoạt động. Bạn có thể trả lời câu hỏi này hay không? – GPPK

Trả lời

1

Bạn chỉ có thể thực hiện công việc của mình với OpenCV sau khi được khởi chạy. Vì vậy, bạn cần phải khởi tạo nó như thế:

1.Create một Callback:

private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) { 
    @Override 
    public void onManagerConnected(int status) { 
     switch (status) { 
     case LoaderCallbackInterface.SUCCESS: 
      //DO YOUR WORK/STUFF HERE 
      break; 
     default: 
      super.onManagerConnected(status); 
      break; 
     } 
    } 
}; 

2.You cần phải khởi tạo callback trong Phương pháp onResume của hoạt động của bạn:

@Override 
    protected void onResume() { 
     super.onResume(); 
     OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_8, this, 
       mOpenCVCallBack); 
    } 

và thats it, tôi hy vọng nó là hữu ích: D

0

bạn nên thêm phụ thuộc vào OpenCV lib vào cấu hình prj android của bạn (thuộc tính-> Android-> Thư viện -> thêm [opencv andrid prg ])

+2

Vui lòng thêm một số giải thích. – Nilambar

Các vấn đề liên quan