用opencv提取fFAST角点和SURF描述子这遇到的问题

用opencv提取fFAST角点和SURF描述子这遇到的问题

今天在提FAST取特征点和SURF描述子的时候居然出现了问题,我一直以为这玩意上手就干呢,毕竟也是用的opencv的库,现在才发现我还是个弟弟。

第一个问题:

OpenCV Error: Assertion failed (src.type() == (((0) & ((1 << 3) - 1)) + (((1)-1) << 3)) || src.type() == (((5) & ((1 << 3) - 1)) + (((1)-1) << 3))) in cornerEigenValsVecs, file /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/imgproc/src/corner.cpp, line 269
这个问题我找到了一个解决办法,链接,解决办法我是从这里找到的。知道解决了,并没有去深究是什么原因导致的。

第二个问题:

OpenCV Error: The function/feature is not implemented () in detectAndCompute, file /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/features2d/src/feature2d.cpp, line 154
这个问题参考链接
现在把我提取SURF描述子的代码贴到下面:

#include<opencv2/opencv.hpp>
#include <opencv2/xfeatures2d.hpp>
#include <opencv2/features2d/features2d.hpp>

using namespace std;
using namespace cv;
using namespace cv::xfeatures2d;


int main(int argc, char** argv)
{
    Mat img_1 = imread("/home/yang/line-with-opencv/src/data/image1.png",0);
    Mat img_2 = imread("/home/yang/line-with-opencv/src/data/image3.png",0);
    if(!img_1.empty())
    {
      cout<<"the image is read"<<endl;
    }

    cout<<" -- Step 1: Detect the keypoints using STAR Detector"<<endl;
    vector<cv::Point2f> key1,key2;
    vector<KeyPoint> keypoints_1,keypoints_2;
    StarDetector detector;
    //detector.detect(img_1, keypoints_1);
    //detector.detect(img_2, keypoints_2);
    
    goodFeaturesToTrack(img_1,key1,500,0.01,10);
    goodFeaturesToTrack(img_2,key2,500,0.01,10);
    cout<<" -- Stpe 2: Calculate descriptors (feature vectors)"<<endl;
        for(int i = 0; i < (int)key1.size(); i++)
    {
      cv::KeyPoint key;
      key.pt = key1[i];
      keypoints_1.push_back(key);
    }

        for(int i = 0; i < (int)key2.size(); i++)
    {
      cv::KeyPoint key;
      key.pt = key1[i];
      keypoints_2.push_back(key);
    }

    Ptr<cv::DescriptorExtractor> brief;
    brief = xfeatures2d::BriefDescriptorExtractor::create();
    cv::Mat descriptors_1, descriptors_2;

    brief->compute(img_1,keypoints_1,descriptors_1);
    brief->compute(img_2,keypoints_2,descriptors_2)

    cout<<"-- Step 3: Matching descriptor vectors with a brute force matcher"<<endl;
    BFMatcher matcher(NORM_HAMMING);
    std::vector<DMatch> mathces;
    matcher.match(descriptors_1, descriptors_2, mathces);
    // -- dwaw matches
    Mat img_mathes;
    drawMatches(img_1, keypoints_1, img_2, keypoints_2, mathces, img_mathes);
    // -- show
    imshow("Mathces", img_mathes);
    waitKey(0);
    return 0;
}

代码执行结果如下:
在这里插入图片描述结果很乱,也没有去剔除误匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值