本章内容:

* 1. 单张图像的特征点计算  cv::xfeatures2d::SURF->detect
         * 2. 图像集合的特征点计算 cv::xfeatures2d::SURF->detect
         * 3. 单张图像特征描述子计算 cv::xfeatures2d::SURF->compute
         * 4. 图像集特征描述子计算 cv::xfeatures2d::SURF->compute
         * 5. 一步计算特征点以及特征描述符 cv::xfeatures2d::SURF->detectAndCompute

1. 单张图像的特征点计算

输出结果:

2. 图像集合的特征点计算

输出结果:

3. 单张图像特征描述符计算

输出结果

4. 图像集合计算特征描述符

输出结果

5.直接计算特征点与特征描述符

输出结果

源码

#include <ostream>
#include <opencv.hpp>
#include<opencv2/opencv.hpp>
#include "opencv2/xfeatures2d.hpp"

int main(int argc, char *argv[])
{
    /*
     本章内容:
         * 1. 单张图像的特征点计算 cv::xfeatures2d::SURF->detect
         * 2. 图像集合的特征点计算 cv::xfeatures2d::SURF->detect
         * 3. 单张图像特征描述子计算 cv::xfeatures2d::SURF->compute
         * 4. 图像集特征描述子计算 cv::xfeatures2d::SURF->compute
         * 5. 一步计算特征点以及特征描述符 detectAndCompute
    */
    cv::String fileName = "/home/wang/dev/Image/pingpang.jpeg";
    cv::String fileName1 = "/home/wang/dev/Image/taohua.jpeg";
    cv::Mat src = cv::imread(fileName);
    cv::Mat src1 = cv::imread(fileName1);

if(src.data == NULL){
        printf("图像读入失败\n");
        return -1;
    }
    /*
     * API接口:    CV_WRAP static Ptr<SURF> create(double hessianThreshold=100,
                  int nOctaves = 4, int nOctaveLayers = 3,
                  bool extended = false, bool upright = false);

*/
    cv::imshow("src",src);
    cv::imshow("src1",src1);
    cv::Ptr<cv::xfeatures2d::SURF> surf= cv::xfeatures2d::SURF::create();
    /* 1. 单张图像的特征点计算 detect
        api接口:CV_WRAP virtual void detect( InputArray image,
                             CV_OUT std::vector<KeyPoint>& keypoints,
                             InputArray mask=noArray() );
    */
    std::vector<cv::KeyPoint> kp1;
    surf->detect(src,kp1);
    cv::Mat dst1;
    cv::drawKeypoints(src,kp1,dst1);
    cv::imshow("dst1",dst1);
    /* 2. 图像集合的特征点计算 detect
            api接口:CV_WRAP virtual void compute( InputArray image,
                              CV_OUT CV_IN_OUT std::vector<KeyPoint>& keypoints,
                              OutputArray descriptors );

*/
    std::vector<cv::Mat> srcs= {src,src1};  // 图像集合构造
    std::vector<cv::Mat> dsts1;  // 图像集合构造
    std::vector<std::vector<cv::KeyPoint>> kps1;
    surf->detect(srcs,kps1);
    cv::String file;
    cv::Mat tem;
    for(int i=0; i < kps1.size();i++){
            cv::drawKeypoints(srcs[i],kps1[i],tem);
            dsts1.push_back(tem);
            file = "dsts1 -> " + std::to_string(i);
            cv::imshow(file,tem);
    }

/* 3. 单张图像特征描述子计算 compute
            api接口:CV_WRAP virtual void compute( InputArray image,
                              CV_OUT CV_IN_OUT std::vector<KeyPoint>& keypoints,
                              OutputArray descriptors );
            参数分析: keypoints :输入输出型特征点,

*/
    cv::Mat des1;
    surf->compute(src,kp1,des1);
    std::cout << "des1.size():" << des1.size() <<std::endl;
    cv::normalize(des1,des1,255,0,cv::NORM_L2);
    cv::transpose(des1,des1);
    cv::imshow("des1", des1);
    /* 4. 图像集特征描述子计算 compute
            api接口:CV_WRAP virtual void compute( InputArrayOfArrays images,
                      CV_OUT CV_IN_OUT std::vector<std::vector<KeyPoint> >& keypoints,
                      OutputArrayOfArrays descriptors );

*/
    std::vector<cv::Mat> dess;
    cv::Mat desNorm;
    surf->compute(srcs,kps1,dess);
    for(int i=0; i < dess.size();i++){
            std::cout << "des ->[" << i << "] size= " << kps1[i].size() << std::endl;
            file = "des -> " + std::to_string(i);
            cv::normalize(dess[i],desNorm,255,0,cv::NORM_L2);
            cv::transpose(desNorm,desNorm);
            cv::imshow(file,desNorm);
    }
    /* 5. 一步计算特征点以及特征描述符 detectAndCompute
            api接口:    CV_WRAP virtual void detectAndCompute( InputArray image, InputArray mask,
                                           CV_OUT std::vector<KeyPoint>& keypoints,
                                           OutputArray descriptors,
                                           bool useProvidedKeypoints=false );

*/
    std::vector<cv::KeyPoint> kp2;
    cv::Mat des2;
    surf->detectAndCompute(src,cv::Mat(),kp2,des2);
    cv::normalize(des2,des2,255,0,cv::NORM_L2);
    cv::transpose(des2,des2);
    cv::Mat dst2;
    cv::drawKeypoints(src,kp2,dst2);
    cv::imshow("dst2",dst2);
    cv::imshow("des",des2);

cv::waitKey(0);
    return 1;
}

opencv surf特征点检测(二),API接口分析相关推荐

  1. opencv——SURF特征点检测并使用Flann算法匹配

    记录一下学习过程,话不多说贴代码: #include <opencv2/core/core.hpp> #include <opencv2/features2d/features2d. ...

  2. 【OpenCV入门教程之十七】OpenCV重映射 SURF特征点检测合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨) ...

  3. [图像识别]10.OpenCV的特征点检测 SIFT和SURF算法

    回顾,上节课你学了什么? R=cv.cornerHarris(img,blockSize,ksize,k) corners=cv.goodFeaturesToTrack(img,maxCorners, ...

  4. Android OpenCV(五十八):SURF特征点检测

    SURF 特征点 SUFR (Speed Up Robust Fetures) ,是对 SIFT 算法的一种改进.SIFT (Scale-invariant Feature Transform) 即尺 ...

  5. SURF 特征点检测

    SURF可以用于对象定位和识别.人脸识别.3D重建.对象跟踪和提取兴趣点等.常用来进行物体辨识和图像匹配. 1.SURF 全称 speed up robust feature 是加速版的SIFT 2. ...

  6. SURF特征点检测--SurfFeatureDetector、SurfDescriptorExtractor和FlannBasedMatcher

    一.关于SURF算法 SURF,我们简单介绍一下,英语全称为SpeededUp Robust Features,直译的话就是"加速版的具有鲁棒性的特征"算法,由Bay在2006年首 ...

  7. Opencv Surf特征实现图像无缝拼接生成全景图像(三)

    转自:https://guo-pu.blog.csdn.net/article/details/90657830 图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解 ...

  8. 特征点检测学习_2(surf算法)

    特征点检测学习_2(surf算法) 在上篇博客特征点检测学习_1(sift算法) 中简单介绍了经典的sift算法,sift算法比较稳定,检测到的特征点也比较多,其最大的确定是计算复杂度较高.后面有不少 ...

  9. SURF算法与SIFT算法的性能比较——图像特征点检测与提取算法分析

    图像特征点提取算法的算法研究(SURF和SIFT算法) 1. 摘要 计算机视觉中,很大一部分研究集中在图像特征提取和特征生成算法上.对图像的优化,不同于一般数学问题的优化方法,图像的优化是对像素点,在 ...

最新文章

  1. git常用命令和场景
  2. 编译包含Google Play服务App的SDK版本问题
  3. dataframe 通配符筛选
  4. linux命令详解:md5sum命令
  5. BCB6.0里没有TCppWebBrowser
  6. 记一次CentOS Install Docker 报错
  7. 1.Rabbitmq学习记录《本质介绍,协议AMQP分析》
  8. 京东广告联盟android,京东APP联盟SDKAndroid版接口说明文档1.0.PDF
  9. 超像素分割算法matlab_像素不够,算法来凑。这个图像超分辨率项目帮你「拍」出高清照片...
  10. spring boot: java @interface注解
  11. 【渝粤教育】国家开放大学2018年春季 0471-22T畜牧学 参考试题
  12. mysql 开源监控软件_开源MySQL_Monito 图形可视化监控工具
  13. 如何使用计算机文件共享,两台电脑如何共享文件?【步骤图解】
  14. UBUNTU学习笔记
  15. Postgres-XL 9.5简易搭建
  16. 抑郁症自我测试皮肤软件,皮肤瘙痒像虫子爬竟是抑郁症
  17. Windows10下使用Conda安装TensorFlow-GPU
  18. 软件配置 | win / mac M1 imagemagick 的安装
  19. 国家税务总局河南省电子税务局中,交契税时,报房屋属地税务机关必填的解决方法
  20. Uos统信系统 nginx

热门文章

  1. 计算机组成原理pc的长度,计算机组成原理课后习题答案(一到九章)
  2. 使用 Python 对股票数据分析预测
  3. 从 http 升级到 https 过程中遇到的一些问题
  4. 岭南师范学院计算机二级查询,岭南师范学院教务管理系统入口http://d.lingnan.edu.cn/jwc/...
  5. 基于鸢尾花数据和手写数字,决策树,随机森林,voting,bagging法的比较
  6. 【增强版短视频去水印源码】去水印微信小程序+去水印软件源码
  7. 如何高效建立知识库?
  8. python IEEE OSA GOOGLE学术下载
  9. 常用计算机软件不包括什么,大学计算机基础试题及答案(二)
  10. stm32h743 FDCAN驱动踩坑记录