Tôi đang viết mã để tìm đối tượng tương tự từ có thể drawable trong chế độ xem lại. Tôi đang sử dụng Opencv 2.4.4 mới nhất.Lỗi xác nhận đối sánh không thành công opencv Android
Dưới đây là các chức năng của tôi và đầu ra từ logcat. Tôi đang làm gì sai khi tôi nhận được kết quả như vậy?
public void detect_image (Mat mRgba) {
object_desc = new Mat();
scene_desc = new Mat();
object_keys = new MatOfKeyPoint();
scene_keys = new MatOfKeyPoint();
matches = new MatOfDMatch();
good_matches = new MatOfDMatch();
Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.sto);
Utils.bitmapToMat(image,object);
surf = FeatureDetector.create(FeatureDetector.FAST);
surf.detect(object, object_keys);
surf.detect(mRgba, scene_keys);
surfEX = DescriptorExtractor.create(DescriptorExtractor.BRIEF);
surfEX.compute(object, object_keys, object_desc);
surfEX.compute(mRgba, scene_keys, scene_desc);
dm = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_SL2);
dm.match(object_desc, scene_desc, matches);
double max_dist = 0;
double min_dist = 100;
for(int i = 0; i < object_desc.rows(); i++)
{ double dist = matches.toArray()[i].distance;
if(dist < min_dist) min_dist = dist;
if(dist > max_dist) max_dist = dist;
}
for(int i = 0; i < object_desc.rows(); i++)
{ MatOfDMatch temp = new MatOfDMatch();
if(matches.toArray()[i].distance < 3*min_dist)
{ temp.fromArray(matches.toArray()[i]);
good_matches.push_back(temp);
}
}
}
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
detect_image(mRgba);
return inputFrame.rgba();
}
Logcat:
03-27 01:55:31.258: E/cv::error()(564): OpenCV Error: Assertion failed
(type == src2.type() && src1.cols == src2.cols &&
(type == CV_32F || type == CV_8U)) in void cv::batchDistance(cv::InputArray,
cv::InputArray, cv::OutputArray, int, cv::OutputArray, int, int, cv::InputArray,
int, bool), file /home/reports/ci/slave/50-SDK/opencv/modules/core/src/stat.cpp,
line 1803
mà dòng chính xác là không về nhận định này? Bạn có chắc chắn rằng 'surf.detect()' có thể chấp nhận Bitmap làm đầu vào không? Nó không phải là một Mat? – JonesV
surf.detect() nhận Mats và đối tượng và mRgba là Mats. Dòng bên dưới gây ra sự cố: dm.match (object_desc, scene_desc, kết quả phù hợp); – Martus0
Sai lầm của tôi, tôi đã không nhìn thấy 'Utils.bitmapToMat()'. Bạn đã xác minh bằng tay 'object_desc.type == scene_desc.type' và' object_desc.cols == object_scene.cols' chưa? Rõ ràng là một số loại không tương thích giữa 'object_desc' và' scene_desc' của bạn ... – JonesV