我實現目標與功能跟蹤檢測和我得到了以下錯誤: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;
}
它不能顯示在屏幕上的對象,但我需要一些信息,我可以把矩形或什麼我可以標記對象,我想跟蹤。 對不起,我的英語,我希望你明白我在問什麼,謝謝你的任何建議。
顯然,當您將其應用於實時相機Feed時,Features2d.drawMatches在android中不起作用。您可以繼續繪製單應性,然後查找結果。您可以在中間步驟中打印日誌信息,以查看可能匹配的結果 – Darshan