OpenCV错误:不支持的格式或格式组合(类型= 16)

时间:2015-03-08 17:57:34

标签: opencv surf feature-extraction opencv4android

我有一个Android应用程序,它使用BOW + SVM方法进行对象检测。我使用DynamicSURF进行特征检测,使用OpponentSURF进行描述符提取,使用FlannBased匹配器。我以RGBA格式获取帧,因此我将其转换为BGR。

当我尝试计算功能时出现问题。出现以下错误:

03-08 23:31:07.965: E/cv::error()(1578): OpenCV Error: Unsupported format or combination of formats (type=16
03-08 23:31:07.965: E/cv::error()(1578): ) in void cv::flann::buildIndex_(void*&, const cv::Mat&, const cv::flann::IndexParams&, const Distance&) [with Distance = cvflann::L2<float>, IndexType = cvflann::Index<cvflann::L2<float> >], file /home/reports/ci/slave_desktop/50-SDK/opencv/modules/flann/src/miniflann.cpp, line 315

这是我的代码:

    Mat matBGR;
    cvtColor(matRGBA, matBGR, CV_RGBA2BGR);

    const Ptr<FeatureDetector> detector =   FeatureDetector::create("DynamicSURF");
    const Ptr<DescriptorExtractor> descriptors = DescriptorExtractor::create("OpponentSURF");
    const Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("FlannBased");
    BOWImgDescriptorExtractor bowDE(descriptors, matcher);

    FileStorage fileStorage(dictionaryPathString + dictionaryNameString, FileStorage::READ);

    Mat dictionary;

    fileStorage["dictionary"] >> dictionary;
    fileStorage.release();
    bowDE.setVocabulary(dictionary);

    Mat features;
    vector<KeyPoint> keypoints;

    detector->detect(matBGR, keypoints);
    KeyPointsFilter::retainBest(keypoints, 1700);
    bowDE.compute(matBGR, keypoints, features);

你知道导致这个问题的原因吗?我搜索了解决方案,但我找不到解决方案。

1 个答案:

答案 0 :(得分:1)

愚蠢的错误..事实证明我使用了错误的文件为BOW字典。我把正确的文件,错误消失了。总是检查这些东西,它可以节省你的时间!