Projects\image_match3图像特征匹配调试记录
- D:\文件及下载相关\文档\Visual Studio \Projects\image_match3\image_match
- #include "opencv2/core/core.hpp"
- #include "highgui.h"
- #include "opencv2/imgproc/imgproc.hpp"
- #include "opencv2/features2d/features2d.hpp"
- #include "opencv2/nonfree/nonfree.hpp"
- #include "opencv2/legacy/legacy.hpp"
- using namespace cv;
- using namespace std;
- int main(int argc, char** argv)
- {
- //待匹配的两幅图像,其中img1包括img2,也就是要从img1中识别出img2
- //Mat img1 = imread("book_in_scene.png");
- //Mat img2 = imread("book2.png");
- Mat img1 = imread("003.png");
- Mat img2 = imread("004.png");
- Mat image01;
- Mat image02;
- cvtColor(img1,image01,CV_RGB2GRAY);
- cvtColor(img2,image02,CV_RGB2GRAY);
- SIFT sift1, sift2;
- vector<KeyPoint> key_points1, key_points2;
- Mat descriptors1, descriptors2, mascara;
- sift1(img1,mascara,key_points1,descriptors1);
- sift2(img2,mascara,key_points2,descriptors2);
- //实例化暴力匹配器——BruteForceMatcher
- BruteForceMatcher<L2<float>> matcher;
- //定义匹配器算子
- vector<DMatch>matches;
- //实现描述符之间的匹配,得到算子matches
- matcher.match(descriptors1,descriptors2,matches);
- //提取出前3个最佳匹配结果
- nth_element(matches.begin(), //匹配器算子的初始位置
- matches.begin()+, // 排序的数量
- matches.end()); // 结束位置
- //剔除掉其余的匹配结果
- matches.erase(matches.begin()+, matches.end());
- namedWindow("SIFT_matches");
- Mat img_matches;
- //在输出图像中绘制匹配结果
- drawMatches(img1,key_points1, //第一幅图像和它的特征点
- img2,key_points2, //第二幅图像和它的特征点
- matches, //匹配器算子
- img_matches, //匹配输出图像
- Scalar(,,)); //用白色直线连接两幅图像中的特征点
- imshow("SIFT_matches",img_matches);
- vector<Point2f> imagePoints1,imagePoints2;
- for(int i=;i<;i++)
- {
- imagePoints1.push_back(key_points1[matches[i].queryIdx].pt);
- imagePoints2.push_back(key_points2[matches[i].trainIdx].pt);
- }
- Mat homo=findHomography(imagePoints1,imagePoints2,CV_RANSAC);
- ////也可以使用getPerspectiveTransform方法获得透视变换矩阵,不过要求只能有4个点,效果稍差
- //Mat homo=getPerspectiveTransform(imagePoints1,imagePoints2);
- cout<<"变换矩阵为:\n"<<homo<<endl<<endl;//输出映射矩阵
- //图像配准
- Mat imageTransform1,imageTransform2;
- warpPerspective(image01,imageTransform1,homo,Size(image02.cols,image02.rows));
- imshow("经过透视矩阵变换后",imageTransform1);
- waitKey();
- return ;
- }
- Mat img1 = imread("003.png");
- Mat img2 = imread("004.png");
测试两个方向拍摄的熊娃娃:
对海面舰船目标的MUSIC高精度定位方法研究(图文) - 期刊论文网 http://www.pinjiao.com/lunwenqikan/kejixiaolunwen/lunwen21906.html
Projects\image_match3图像特征匹配调试记录的更多相关文章
- 图像特征匹配,sift,surf法
今天想把这一段时间做的一些工作做个总结,望能帮到大家,尊重原创作品,转摘请注明原创地址:http://www.cnblogs.com/ggYYa/p/7902900.html,在此感谢!
- OpenCV探索之路(二十三):特征检测和特征匹配方法汇总
一幅图像中总存在着其独特的像素点,这些点我们可以认为就是这幅图像的特征,成为特征点.计算机视觉领域中的很重要的图像特征匹配就是一特征点为基础而进行的,所以,如何定义和找出一幅图像中的特征点就非常重要. ...
- OpenCV2:特征匹配及其优化
在OpenCV2简单的特征匹配中对使用OpenCV2进行特征匹配的步骤做了一个简单的介绍,其匹配出的结果是非常粗糙的,在这篇文章中对使用OpenCV2进行匹配的细化做一个简单的总结.主要包括以下几个内 ...
- OpenCV2简单的特征匹配
特征的匹配大致可以分为3个步骤: 特征的提取 计算特征向量 特征匹配 对于3个步骤,在OpenCV2中都进行了封装.所有的特征提取方法都实现FeatureDetector接口,DescriptorEx ...
- 特征提取(Detect)、特征描述(Descriptor)、特征匹配(Match)的通俗解释
特征匹配(Feature Match)是计算机视觉中很多应用的基础,比如说图像配准,摄像机跟踪,三维重建,物体识别,人脸识别,所以花一些时间去深入理解这个概念是不为过的.本文希望通过一种通俗易懂的方式 ...
- OPENCV图像特征点检测与FAST检测算法
前面描述角点检测的时候说到,角点其实也是一种图像特征点,对于一张图像来说,特征点分为三种形式包括边缘,焦点和斑点,在OPENCV中,加上角点检测,总共提供了以下的图像特征点检测方法 FAST SURF ...
- (三)ORB特征匹配
ORBSLAM2匹配方法流程 在基于特征点的视觉SLAM系统中,特征匹配是数据关联最重要的方法.特征匹配为后端优化提供初值信息,也为前端提供较好的里程计信息,可见,若特征匹配出现问题,则整个视觉SLA ...
- 第十六节、基于ORB的特征检测和特征匹配
之前我们已经介绍了SIFT算法,以及SURF算法,但是由于计算速度较慢的原因.人们提出了使用ORB来替代SIFT和SURF.与前两者相比,ORB有更快的速度.ORB在2011年才首次发布.在前面小节中 ...
- 原来CNN是这样提取图像特征的。。。
对于即将到来的人工智能时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的领域,会不会感觉马上就out了?作为机器学习的一个分支,深度学习同样需要计算机获得强大的学 ...
随机推荐
- 怎样推断多个字段组成的keyword在另外一张表中是否存在
怎样推断多个字段组成的keyword在另外一张表中是否存在 老帅(20141107) 1.首先推断一个keyword在另外一张表中是否存在非常easy! SELECT * FROM a WHERE a ...
- 算法笔记_097:蓝桥杯练习 算法提高 P1001(Java)
目录 1 问题描述 2 解决方案 1 问题描述 当两个比较大的整数相乘时,可能会出现数据溢出的情形.为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法.具体来说,首先以字符串的形式输入两个整 ...
- C# 之 FTPserver中文件上传与下载(二)
通过上一篇博客<C# 之 FTPserver中文件上传与下载(一)>,我们已经创建好了一个FTPserver,而且该server须要username和password的验证 ...
- CXF调用方式——使用wsdl2java(Windwos下)
1.自动生成客户端代码: 先把CXF下到本地,本例中我下的是apache-cxf-3.1.2,然后在命令行里到相应路径执行命令: D:\soft\DevelopSoft\apache-cxf-\bin ...
- Android:实现手势滑动的事件处理方法
首先得Activity必须实现OnGestureListener接口,该接口提供了关于手势操作的一些方法, onDown方法:onDown是,一旦触摸屏按下,就马上产生onDown事件 ...
- 【Android应用开发技术:用户界面】布局管理器
作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells Github:https://github.co ...
- TabLayout+Fragment+ViewPager+FragmentStatePagerAdapter实现Tab标签
首先来看下实现的效果吧: 最近在项目中实现这个效果的时候.尽管自己磕磕绊绊的实现了,可是知识确实模模糊糊的,今天天气异常的冷,在加上这个知识不太熟练,实在是没有心情进行接下来的计划,干脆借着这个时间, ...
- 如何让sublime text 2/3支持中文编码
由于每个编辑器默认编码格式不一样,所以大致在一些编辑器中编辑的代码注释在另外一些编辑器中出现乱码.在sourceinsight里面编辑的中文在sublime text3中出现乱码,所以上网找了一下解决 ...
- Android收起虚拟键盘
关于收起虚拟键盘,网上能找到的大多是这个: InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_M ...
- CMSGC造成内存碎片的解决方法
我们知道,CMSGC在老生代回收时产生的内存碎片会导致老生代的利用率变低:或者可能在老生代总内存大小足够的情况下,却不能容纳新生代的晋升行为(由于没有连续的内存空间可用),导致触发FullGC.针对这 ...