OpenCV之图像特征提取与检测(十四) 特征描述子

图像特征描述子:即图像中每个像素位置的描述,通过此描述去匹配另一张图像是否含有相同特征。

描述子与匹配:Brute-Force匹配(暴力匹配)
这里写图片描述

代码

    #include "../common/common.hpp"

    using namespace cv::xfeatures2d;

    void main(int argc, char** argv)
    {
        Mat img1 = imread(getCVImagesPath("images/box.png"), IMREAD_GRAYSCALE);
        Mat img2 = imread(getCVImagesPath("images/box_in_scene.png"), IMREAD_GRAYSCALE);
        imshow("image1", img1);
        imshow("image2", img2);

        int minHessian = 400;
        Ptr<SURF> detector = SURF::create(minHessian); // 也可以用 SIFT 特征
        vector<KeyPoint> keypoints_1; // 保存特征点
        vector<KeyPoint> keypoints_2;

        Mat descriptor_1, descriptor_2; // 特征描述子
        detector->detectAndCompute(img1, Mat(), keypoints_1, descriptor_1, false); // SURF特征检测,同时计算生成对应描述子
        detector->detectAndCompute(img2, Mat(), keypoints_2, descriptor_2, false); // 参数 false 表示不适用提供的keypoints,让自己算
        cout << "keypoints_1.size=" << keypoints_1.size() << endl; // keypoints_1.size=786
        cout << "keypoints_2.size=" << keypoints_2.size() << endl; // keypoints_2.size = 1040
        // descriptor_1 depth=5, type=5, size=[64 x 786]   CV_32F单通道   每个关键点用64来描述?
        cout << "descriptor_1 depth=" << descriptor_1.depth() << ", type=" << descriptor_1.type() << ", size=" << descriptor_1.size() << endl;
        // descriptor_2 depth = 5, type = 5, size = [64 x 1040]
        cout << "descriptor_2 depth=" << descriptor_2.depth() << ", type=" << descriptor_2.type() << ", size=" << descriptor_2.size() << endl;

        BFMatcher matcher(NORM_L2); // Brute-Force 匹配,参数表示匹配的方式,默认NORM_L2(欧几里得) ,NORM_L1(绝对值的和)
        vector<DMatch> matches; // 保存匹配的结果
        matcher.match(descriptor_1, descriptor_2, matches); // 暴力匹配
        cout << "matches.size=" << matches.size() << endl; // matches.size = 786

        Mat matchesImg;
        drawMatches(img1, keypoints_1, img2, keypoints_2, matches, matchesImg); // 显示匹配的结果
        imshow("Descriptor Match", matchesImg);

        waitKey(0);
    }

效果图

这里写图片描述

猜你喜欢

转载自blog.csdn.net/huanghuangjin/article/details/81284568