opencv surf特征点检测(二),API接口分析
本章内容:
* 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接口分析相关推荐
- opencv——SURF特征点检测并使用Flann算法匹配
记录一下学习过程,话不多说贴代码: #include <opencv2/core/core.hpp> #include <opencv2/features2d/features2d. ...
- 【OpenCV入门教程之十七】OpenCV重映射 SURF特征点检测合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨) ...
- [图像识别]10.OpenCV的特征点检测 SIFT和SURF算法
回顾,上节课你学了什么? R=cv.cornerHarris(img,blockSize,ksize,k) corners=cv.goodFeaturesToTrack(img,maxCorners, ...
- Android OpenCV(五十八):SURF特征点检测
SURF 特征点 SUFR (Speed Up Robust Fetures) ,是对 SIFT 算法的一种改进.SIFT (Scale-invariant Feature Transform) 即尺 ...
- SURF 特征点检测
SURF可以用于对象定位和识别.人脸识别.3D重建.对象跟踪和提取兴趣点等.常用来进行物体辨识和图像匹配. 1.SURF 全称 speed up robust feature 是加速版的SIFT 2. ...
- SURF特征点检测--SurfFeatureDetector、SurfDescriptorExtractor和FlannBasedMatcher
一.关于SURF算法 SURF,我们简单介绍一下,英语全称为SpeededUp Robust Features,直译的话就是"加速版的具有鲁棒性的特征"算法,由Bay在2006年首 ...
- Opencv Surf特征实现图像无缝拼接生成全景图像(三)
转自:https://guo-pu.blog.csdn.net/article/details/90657830 图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解 ...
- 特征点检测学习_2(surf算法)
特征点检测学习_2(surf算法) 在上篇博客特征点检测学习_1(sift算法) 中简单介绍了经典的sift算法,sift算法比较稳定,检测到的特征点也比较多,其最大的确定是计算复杂度较高.后面有不少 ...
- SURF算法与SIFT算法的性能比较——图像特征点检测与提取算法分析
图像特征点提取算法的算法研究(SURF和SIFT算法) 1. 摘要 计算机视觉中,很大一部分研究集中在图像特征提取和特征生成算法上.对图像的优化,不同于一般数学问题的优化方法,图像的优化是对像素点,在 ...
最新文章
- git常用命令和场景
- 编译包含Google Play服务App的SDK版本问题
- dataframe 通配符筛选
- linux命令详解:md5sum命令
- BCB6.0里没有TCppWebBrowser
- 记一次CentOS Install Docker 报错
- 1.Rabbitmq学习记录《本质介绍,协议AMQP分析》
- 京东广告联盟android,京东APP联盟SDKAndroid版接口说明文档1.0.PDF
- 超像素分割算法matlab_像素不够,算法来凑。这个图像超分辨率项目帮你「拍」出高清照片...
- spring boot: java @interface注解
- 【渝粤教育】国家开放大学2018年春季 0471-22T畜牧学 参考试题
- mysql 开源监控软件_开源MySQL_Monito 图形可视化监控工具
- 如何使用计算机文件共享,两台电脑如何共享文件?【步骤图解】
- UBUNTU学习笔记
- Postgres-XL 9.5简易搭建
- 抑郁症自我测试皮肤软件,皮肤瘙痒像虫子爬竟是抑郁症
- Windows10下使用Conda安装TensorFlow-GPU
- 软件配置 | win / mac M1 imagemagick 的安装
- 国家税务总局河南省电子税务局中,交契税时,报房屋属地税务机关必填的解决方法
- Uos统信系统 nginx
热门文章
- 计算机组成原理pc的长度,计算机组成原理课后习题答案(一到九章)
- 使用 Python 对股票数据分析预测
- 从 http 升级到 https 过程中遇到的一些问题
- 岭南师范学院计算机二级查询,岭南师范学院教务管理系统入口http://d.lingnan.edu.cn/jwc/...
- 基于鸢尾花数据和手写数字,决策树,随机森林,voting,bagging法的比较
- 【增强版短视频去水印源码】去水印微信小程序+去水印软件源码
- 如何高效建立知识库?
- python IEEE OSA GOOGLE学术下载
- 常用计算机软件不包括什么,大学计算机基础试题及答案(二)
- stm32h743 FDCAN驱动踩坑记录