2013-12-20 53 views
2

我實現目標與功能跟蹤檢測和我得到了以下錯誤:Android的OpenCV的 - 目標跟蹤

12-19 20:59:16.943: E/cv::error()(31858): OpenCV Error: Assertion failed (src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols) in void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean), file /home/reports/ci/slave_desktop/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp, line 97 12-19 20:59:16.943: E/org.opencv.android.Utils(31858): nMatToBitmap catched cv::Exception: /home/reports/ci/slave_desktop/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp:97: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean) 12-19 20:59:16.943: E/CameraBridge(31858): Mat type: Mat [ 820*2672*CV_8UC3, isCont=true, isSubmat=false, nativeObj=0x55650380, dataAddr=0x5ec20010 ] 12-19 20:59:16.943: E/CameraBridge(31858): Bitmap type: 960*720 12-19 20:59:16.943: E/CameraBridge(31858): Utils.matToBitmap() throws an exception: /home/reports/ci/slave_desktop/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp:97: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean)

這裏是代碼:

public void onCameraViewStarted(int width, int height) { 
    mRgba = new Mat(); 
    mGray = new Mat(); 
    mView = new Mat(); 
    mObject = new Mat(); 
} 

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

    switch (viewMode) { 
    case VIEW_MODE_RGBA: 

     return mRgba; 

    case VIEW_MODE_FeatureDetect: 
     try { 
     mGray = inputFrame.gray(); 
     mObject = new Mat(); 
     mObject = Highgui.imread(Environment.getExternalStorageDirectory()+ "/Android/data/" + getApplicationContext().getPackageName() + "/Files/Object.jpg", Highgui.CV_LOAD_IMAGE_GRAYSCALE); 
     mView = mGray.clone();   

     FeatureDetector myFeatureDetector = FeatureDetector.create(FeatureDetector.ORB); 

     MatOfKeyPoint keypoints = new MatOfKeyPoint(); 
     myFeatureDetector.detect(mGray, keypoints); 

     MatOfKeyPoint objectkeypoints = new MatOfKeyPoint(); 
     myFeatureDetector.detect(mObject, objectkeypoints); 

     DescriptorExtractor Extractor = DescriptorExtractor.create(DescriptorExtractor.ORB); 
     Mat sourceDescriptors = new Mat(); 
     Mat objectDescriptors = new Mat(); 
     Extractor.compute(mGray, keypoints, sourceDescriptors); 
     Extractor.compute(mGray, objectkeypoints, objectDescriptors); 
     DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE); 

     MatOfDMatch matches = new MatOfDMatch(); 
     matcher.match(sourceDescriptors, objectDescriptors, matches); 

     Features2d.drawMatches(mGray, keypoints, mObject, objectkeypoints, matches, mView); 

     return mView; 
     } catch (Exception e) { 
      Log.d("Exception",e.getMessage()); 
     } 

    } 

    return mRgba; 
} 

它不能顯示在屏幕上的對象,但我需要一些信息,我可以把矩形或什麼我可以標記對象,我想跟蹤。 對不起,我的英語,我希望你明白我在問什麼,謝謝你的任何建議。

+0

顯然,當您將其應用於實時相機Feed時,Features2d.drawMatches在android中不起作用。您可以繼續繪製單應性,然後查找結果。您可以在中間步驟中打印日誌信息,以查看可能匹配的結果 – Darshan

回答

1

感謝的Darshan的建議下,我解決這個問題,就需要調整圖像大小, 添加以下代碼下面Features2d.drawMatches(mGray, keypoints, mObject, objectkeypoints, matches, mView);這樣Imgproc.resize(mView, mView, mGray.size());,然後它可以工作。