stitcher 算法

优点: 简单便捷, 可以一次性拼合多张图片。

缺点: 1. 会卡顿一下。

2. 多图拼接的时候可能会丢失掉一些图片。

void example()
{Mat img1 = imread("C:/Users/59834/Desktop/image/a.png");Mat img2 = imread("C:/Users/59834/Desktop/image/b.png");Mat img3 = imread("C:/Users/59834/Desktop/image/c.png");Mat img4 = imread("C:/Users/59834/Desktop/image/d.png");imshow("img1",img1);imshow("img2",img2);imshow("img3",img3);imshow("img4",img4);//带顺序容器vectorvector<Mat>images;images.push_back(img1);images.push_back(img2);images.push_back(img3);images.push_back(img4);//用来保存最终拼接图Mat result;//false 不使用GPU加速Stitcher sti = Stitcher::createDefault(false);//将向量容器中所有的图片按照顺序进行拼接,结果保存在result中Stitcher::Status sta = sti.stitch(images,result);if(sta != Stitcher::OK){cout<<"canot Stitcher"<<endl;}imshow("result",result);waitKey(0);}

SURF:

优点: 拼接的图像效果质量理想。

缺点: 一次性只支持图片两两拼接, 如果多图拼接只能先拼一个再拼下一个。

SURF流程:

使用:

1. 特征点采集

2.保存最优特征点对象

3. 特征点周围匹配

4. 透视转换, 图像融合

5. 优化图像

.

Mat left = imread("C:/Users/59834/Desktop/image/a1.png");Mat right = imread("C:/Users/59834/Desktop/image/a2.png");imshow("left",left);imshow("right",right);//创建SURF对象//create 函数参数 海森矩阵阀值Ptr<SURF> surf;surf = SURF::create(800);//暴力匹配器BFMatcher matcher;//特征点容器vector<KeyPoint>key1,key2;Mat c,d;//1、选择特征点surf->detectAndCompute(left,Mat(),key2,d);surf->detectAndCompute(right,Mat(),key1,c);//特征点对比,保存vector<DMatch> matches;matcher.match(d,c,matches);//排序从小到大sort(matches.begin(),matches.end());//2、保存最优的特征点对象vector<DMatch>good_matches;int ptrpoint = std::min(50,(int)(matches.size()*0.15));for (int i = 0;i < ptrpoint;i++){good_matches.push_back(matches[i]);}//2-1、画线 最优的特征点对象连线Mat outimg;drawMatches(left,key2,right,key1,good_matches,outimg,Scalar::all(-1),Scalar::all(-1),vector<char>(),DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS);imshow("outimg",outimg);//3、特征点匹配vector<Point2f>imagepoint1,imagepoint2;for (int i= 0 ;i < good_matches.size();i++){imagepoint1.push_back(key1[good_matches[i].trainIdx].pt);imagepoint2.push_back(key2[good_matches[i].queryIdx].pt);}//4、透视转换 图形融合Mat homo = findHomography(imagepoint1,imagepoint2,CV_RANSAC);imshow("homo",homo);CalcCorners(homo,right);Mat imageTransForm;warpPerspective(right,imageTransForm,homo,Size(MAX(corners.right_top.x,corners.right_bottom.x),left.rows));imshow("imageTransForm",imageTransForm);int dst_width = imageTransForm.cols;int dst_height = left.rows;Mat dst(dst_height,dst_width,CV_8UC3);dst.setTo(0);imageTransForm.copyTo(dst(Rect(0,0,imageTransForm.cols,imageTransForm.rows)));left.copyTo(dst(Rect(0,0,left.cols,left.rows)));//5、优化图像OptimizeSeam(left,imageTransForm,dst);imshow("dst",dst);waitKey(0);

opencv 图像拼接SURF相关推荐

  1. python+opencv图像拼接-python opencv 图像拼接的实现方法

    初级的图像拼接为将两幅图像简单的粘贴在一起,仅仅是图像几何空间的转移与合成,与图像内容无关.高级图像拼接也叫作基于特征匹配的图像拼接,拼接时消去两幅图像相同的部分,实现拼接合成全景图. 具有相同尺寸的 ...

  2. OpenCV图像拼接之Stitching和Stitching_detailed

    Stitcher类与detail命名空间 OpenCV提供了高级别的函数封装在Stitcher类中,使用很方便,不用考虑太多的细节. 低级别函数封装在detail命名空间中,展示了opencv算法实现 ...

  3. c++ opencv图像拼接

    图像拼接 SURF算法实现的拼接代码. 基于ORB的图像拼接 opencv自带的拼接算法stitch SURF算法实现的拼接代码. #include "highgui/highgui.hpp ...

  4. OpenCV图像拼接-Stitcher类-Stitching detailed使用与参数介绍

    关于OpenCV图像拼接的方法,如果不熟悉的话,可以先看看我整理的如下四篇博客: OpenCV常用图像拼接方法(一):直接拼接(硬拼) OpenCV常用图像拼接方法(二):基于模板匹配拼接 OpenC ...

  5. HI3559算法移植之OpenCV图像拼接、配准和图像融合技术(三)

    图像拼接比较经典的是SIFT.SURF.ORB等算法.其中SURF是SIFT的升级版,在实时性上要优于后者.本次先实现图片级的融合.拼接. SURF的构建流程是:构建Hessian矩阵.H矩阵判别式. ...

  6. OPenCV 图像拼接之------stitching和stitching_detailed

    Stitcher类与detail命名空间 OpenCV提供了高级别的函数封装在Stitcher类中,使用很方便,不用考虑太多的细节. 低级别函数封装在detail命名空间中,展示了opencv算法实现 ...

  7. python图像拼接_python opencv 图像拼接的实现方法

    初级的图像拼接为将两幅图像简单的粘贴在一起,仅仅是图像几何空间的转移与合成,与图像内容无关.高级图像拼接也叫作基于特征匹配的图像拼接,拼接时消去两幅图像相同的部分,实现拼接合成全景图. 具有相同尺寸的 ...

  8. OpenCV仿射变换 SURF特征点描述合辑

    原文:http://blog.csdn.net/poem_qianmo/article/details/33320997?utm_source=tuicool&utm_medium=refer ...

  9. pythonopencv算法_python opencv之SURF算法示例

    本文介绍了python opencv之SURF算法示例,分享给大家,具体如下: 目标: SURF算法基础 opencv总SURF算法的使用 原理: 上节课使用了SIFT算法,当时这种算法效率不高,需要 ...

最新文章

  1. markdown editor_基于 Vue+Vditor 所见即所得Markdown编辑器
  2. 【数学和算法】初识卡尔曼滤波器(六)
  3. 全球及中国现金回收机行业销售前景与运营效益分析报告2022版
  4. Virtualization基础
  5. [转]数据库分库分表
  6. MFC返回的临时对象指针成因?
  7. c语言如何限制数字大小下线,C语言学习Day19
  8. 上传漏洞-一句话木马
  9. 初学python100例-案例23 python输出菱形图案 青少年python编程 少儿编程案例讲解
  10. Photoshop学习(十六):利用蒙版合成图像
  11. DFM文件以及写该文章的原因等等
  12. VSCode-工控机远程开发 之(一) VSCode无法连接扩展商店
  13. eplan和西门子plc的对接_彻底搞定西门子1200PLC之通讯篇
  14. 毕业设计 - 基于Java的聊天室系统设计与实现【源码+论文】
  15. LCA(最近公共祖先)问题
  16. 2021高考北京大峪中学成绩查询,最新披露:京城30所中学高考成绩
  17. Xcode 更改默认版本 xcode-select
  18. java界面布局举例,java图形界面实例
  19. 东大14春学期《计算机应用基础》在线作业1,[东北大学]21春学期《计算机应用基础》在线平时作业1...
  20. Android 展开/收回动画效果思路与实现

热门文章

  1. 荣耀畅玩6A与红米5多维度PK,谁才是最佳千元机
  2. JavaScript时间加减、时间加一天、时间加一个月、时间加一年、时间戳转“yyyy-MM-dd HH:mm:ss”
  3. python王者战斗_PYTHON-面向对象-练习-王者荣耀 对砍游戏
  4. C语言 输入字符串,先序遍历生成二叉树
  5. Transact-SQL语言简介
  6. 【2019西电网信杯】线上赛部分题wp
  7. FFmpeg入门详解之89:HTTP-FLV讲解
  8. abap内表的操作汇总
  9. 高频交易如何与毫秒相争
  10. R和Python语言之间相互调