本人小白一枚,"Hello World!"级别C++程序员,也是个OpenCV词典使用者。因项目需要,需实现4张图片(左上、右上、左下、右下)融合的功能。虽然应该先完成标定工作,奈何没经验,在标定环节卡了几天后决定还是先完成融合工作。搜了两天都没有搜到适合的代码或demo,只有搜到拼接左右两张图片,或者连续拼接多张图片的代码。今天突然想到该怎么拼接了,废话不多说,先看"算法"图:

是不是很直观。
在实验室随手拍了几张,因为上传照片的大小有限制,所以拼接的不是原图,效果比原图的拼接效果要差一些。
左上(/home/nvidia/21.jpg):

右上(/home/nvidia/22.jpg):

左下(/home/nvidia/23.jpg):

右下(/home/nvidia/24.jpg):
直接上代码 main.cpp

#include <iostream>
#include <opencv2/highgui.hpp>
#include <opencv2/stitching.hpp>using namespace std;
using namespace cv;
bool try_use_gpu = false;
vector<Mat> imgs0; //用于存放左上和右上
vector<Mat> imgs1; //用于存放左下和右下
vector<Mat> imgs; //用于存放左上和右上拼接图、左下和右下拼接图
string result_name = "/home/nvidia/result.jpg"; //用于保存结果
int main(/*int argc, char * argv[]*/)
{Mat img1 = imread("/home/nvidia/21.jpg"); //读图Mat img2 = imread("/home/nvidia/22.jpg");Mat img3 = imread("/home/nvidia/23.jpg");Mat img4 = imread("/home/nvidia/24.jpg");if (img1.empty() || img2.empty()){cout << "Can't read image 21.jpg or 22.jpg" << endl;return -1;}if (img3.empty() || img4.empty()){cout << "Can't read image 23.jpg or 24.jpg" << endl;return -1;}imgs0.push_back(img1);imgs0.push_back(img2);imgs1.push_back(img3);imgs1.push_back(img4);Stitcher stitcher = Stitcher::createDefault(try_use_gpu);Mat pano0_0, pano0_1;Mat pano1_0, pano1_1;Mat pano2 ,pano3, pano4, pano_final;// 使用stitch函数进行拼接Stitcher::Status status1 = stitcher.stitch(imgs0, pano0_0);if (status1 != Stitcher::OK){cout << "Can't stitch img1 & img2, error code = " << int(status1) << endl;return -1;}Stitcher::Status status2 = stitcher.stitch(imgs1, pano1_0);if (status2 != Stitcher::OK){cout << "Can't stitch img3 & img4, error code = " << int(status2) << endl;return -1;}transpose(pano0_0,pano0_1); //左上和右上拼完后的图片左转90度transpose(pano1_0,pano1_1); //左下和右下拼完后的图片左转90度imgs.push_back(pano0_1);imgs.push_back(pano1_1);Stitcher::Status status = stitcher.stitch(imgs, pano2);if (status != Stitcher::OK){cout << "Can't stitch images, error code = " << int(status) << endl;return -1;}transpose(pano2,pano3); //4张图片拼完之后再经过三次左转90度,就变成正的了transpose(pano3,pano4);transpose(pano4,pano_final);imwrite(result_name, pano_final);//将拼接结果保存到/home/nvidia/result.jpg// 显示结果图像namedWindow("全景图像",0);resizeWindow("全景图像",1920,1080); //全景图像的尺寸,我这设置的和屏幕分辨率一样imshow("全景图像", pano_final);if (waitKey() == 27)return 0;
}

.pro文件这样配置

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qtSOURCES += main.cppINCLUDEPATH += /usr/local/include       \/usr/local/include/opencv    \/usr/local/include/opencv2LIBS += /usr/local/lib/libopencv_calib3d.so \/usr/local/lib/libopencv_core.so \/usr/local/lib/libopencv_features2d.so \/usr/local/lib/libopencv_flann.so \/usr/local/lib/libopencv_highgui.so \/usr/local/lib/libopencv_imgcodecs.so \/usr/local/lib/libopencv_imgproc.so \/usr/local/lib/libopencv_ml.so \/usr/local/lib/libopencv_objdetect.so \/usr/local/lib/libopencv_photo.so \/usr/local/lib/libopencv_shape.so \/usr/local/lib/libopencv_stitching.so \

结果图:

虽然运行结果看着还可以(四周没拼接好主要是因为我照片没拍好),但是足足用了10秒钟,可能是控制器的CPU不行吧(拼接原图用了大约45秒,4张原图每张大约6M,效果比这个结果图要好一些)。
第一次写文章,写的不对不好的地方还请各路大神指点一二。

https://blog.csdn.net/luckyfairy17/article/details/81239356
https://blog.csdn.net/hongtao_6/article/details/82183403
https://blog.csdn.net/hongtao_6/article/details/81910691

OpenCV3实现图像拼接融合相关推荐

  1. stitching.cpp鱼眼图像拼接融合 源码分析

    之前运行OpenCV官方示例的cpp时 看到stitching.cpp拼接融合还不错 然后我在MATLAB上 用之前编的经纬映射法校正三幅鱼眼图像后 不知道该怎样保存下校正好的图 如果save或者sa ...

  2. [开源项目]基于FPGA的视频图像拼接融合

    基于FPGA的视频图像拼接融合 本项目简单来说,就是实时生成视频全景图,该架构经过优化,可以实时视频输出. 算法 下图说明了描述算法每个步骤的系统框图 该系统大致可以分为三个子系统: 预处理 基于 S ...

  3. 图像融合——stitching.cpp鱼眼图像拼接融合(01)

    stitching.cpp鱼眼图像拼接融合 源码分析. https://blog.csdn.net/wd1603926823/article/details/48846099 之前运行OpenCV官方 ...

  4. 基于SIFT特征的图像拼接融合(matlab+vlfeat实现)

    基于SIFT特征的图像拼接融合(matlab+vlfeat实现) piccolo,之前做的东西,简单整理下,不是做图像方向的,写的不好轻喷 主要原理参看SIFT算法详解和SIFT特征匹配算法介绍--寻 ...

  5. C++ OpenCV 图像拼接融合

    目录 一:需求分析 二:步骤详解 三:完整源码分享 四:多张图像拼接  Stitcher算法 一:需求分析 将下面两张图像进行拼接 拼接得到一张完整的图像 二:步骤详解 1.选择特征点 //1.选择特 ...

  6. matlab图像拼接融合(四种方法)

    matlab图像拼接的四种方法  1.直接拼接,  2.亮度调整后拼接,  3.按距离比例融合,  4.亮度调整后按距离比例融合 流程: 1.读入左,右图,并取出重合部分,并转化为亮度图 2.分别把每 ...

  7. python图像拼接融合_python实现图像拼接

    本文实例为大家分享了python实现图像拼接的具体代码,供大家参考,具体内容如下 1.待拼接的图像 2. 基于SIFT特征点和RANSAC方法得到的图像特征点匹配结果 3.图像变换结果 4.代码及注意 ...

  8. python调用stitcher类进行图像拼接融合

    BROWN大神03'ICCV和07'IJCV的AutoStitch AutoStitch对于图像拼接效果很好,已经非常成熟,各路拼接软件和应用都纷纷落地,Opencv中也实现了该算法.python调用 ...

  9. python调用stitcher类自动实现多个图像拼接融合

    使用stitcher需要注意,图像太大会报错而且计算慢. 特点和适用范围:图像需有足够重合相同特征区域. 优点:适应部分倾斜/尺度变换和畸变情形,拼接效果好,使用简单,可以一次拼接多张图片. 缺点:需 ...

最新文章

  1. boost::io::ostream_joiner和boost::io::make_ostream_joiner用法的测试程序
  2. QT信号与槽机制需要注意的问题
  3. T-sql检测文件夹是否存在
  4. AC Automaton
  5. leetcode 327. 区间和的个数(treemap)
  6. Intellij Java注释模板
  7. Stanford机器学习---第二讲. 多变量线性回归 Linear Regression with multiple variable
  8. 【BZOJ3294】放棋子(动态规划,容斥,组合数学)
  9. aspf ftp_【解析】文件传输协议:FTP、TFTP、SFTP有什么区别?
  10. 微信支付(1)---功能测试点
  11. Windows XP修改CHM字体大小
  12. Jmeter取样器设置
  13. English:英语学习口诀(实用)
  14. 六大任务赏金平台,带你深度参与区块链的发展
  15. 【无人机】基于Matlab实现无人机轨迹规划目标跟踪附论文报告和代码
  16. 利用JavaScript生成动态添加歌单
  17. 阿里云项目经理:Redis 开发规范
  18. 横井军平(WIKI资源收集)
  19. 预成大器,远离对日外包
  20. 解密PDF文件打开密码

热门文章

  1. 阿里云服务器上安装nginx
  2. 高通9xxx系列4G模块modem linux编译环境安装及配置详细说明
  3. otherwise 的用法
  4. Interviewing at Amazon — Leadership Principles Reading Notes
  5. F1意大利站,阿隆索在法拉利的主场夺冠
  6. SpringBoot整合Mybatis-Plus连接Oracle数据库生成代码
  7. JavaScript 个人笔记3(详细BOMDOM)
  8. 【就业必备知识】大学毕业如何处理档案和户口,小心变成死档和黑户
  9. C语言零基础——小白应该知道的事
  10. 网银显示服务器无效应,网银U盾报错“系统智能卡服务未启动”的解决方案