android - Matcher Assertions failed 报错opencv Android

标签 android opencv image-processing

我正在编写代码以从 camerapreview 中的可绘制对象中查找相似的对象。我使用的是最新的 Opencv 2.4.4。

下面是我的函数和 logcat 的输出。我得到这样的输出我做错了什么?

 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();
}

日志:

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

最佳答案

只是为了结束这个问题:

根据您的评论,以下行导致了问题:

dm.match(object_desc, scene_desc, matches);

我建议您手动验证:

(object_desc.type == scene_desc.type &&
 object_desc.cols == object_scene.cols)

问题最终是对于第一帧,object_desc.cols() != scene_desc.cols()。一个简单的 if 就足以解决问题。

关于android - Matcher Assertions failed 报错opencv Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14823518/

相关文章:

Android设备USB调试

android - 非法状态异常 : RecyclerView is null inside of Fragment within NavigationDrawer activity

c++ - OpenCV C++ 创建可重用的关键点和描述符集,用于拼接多个图像

c++ - opencv加载图像的两种方式有什么不同?

python - 如何获得2d的高斯核? (opencv)

android - 将 Jtransforms 库导入 android studio

python - 过滤图像以提高文本识别

image - 生成和使用许多图像失败

python - 如何使用 CUDA 或 OpenCL 加速 block 匹配算法?

来自 ABS fragment 的 Android 通知 'Cannot resolve method ' build()'