OpenCV中的全景拼接例程

简介: 使用Stitcher类,通过createDefault()方法创建拼接对象,通过stitch()方法执行默认的自动拼接。自动拼接和07年Brown和Lowe发表的论文描述的步骤基本一致,只不过使用的特征提取算法是ORB,而不是慢吞吞、有专利保护的SIFT和SURF。

使用Stitcher类,通过createDefault()方法创建拼接对象,通过stitch()方法执行默认的自动拼接。自动拼接和07年Brown和Lowe发表的论文描述的步骤基本一致,只不过使用的特征提取算法是ORB,而不是慢吞吞、有专利保护的SIFT和SURF。开源万岁!

 

代码内容:设置几张图片,扔到向量里面,然后计算全景图。

opencv-3.0.0源码中没有找到测试图片,很蛋碎。到github上找了下,发现都在[https://github.com/Itseez/opencv_extra](opencv_extra)这个项目下。。使用到了boat1.jpg~boat6.jpg

在fedora22+i53210+12G内存+全SSD条件下测试,还是有点慢的,大概5,6秒才出结果。当然,如果只有2张图片,秒出。

代码:

 

```

//图像拼接
//哦,这个程序是最简单的拼接,最傻瓜的那种,不必知道拼接的pipeline
//只需要调用createDefault()和stitch()方法就可以完成拼接

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/stitching/stitcher.hpp>

using namespace std;
using namespace cv;

string IMAGE_PATH_PREFIX = "/home/chris/Pictures/";

bool try_use_gpu = false;
vector<Mat> imgs;
string result_name = IMAGE_PATH_PREFIX + "result.jpg";


int main()
{
Mat img = imread(IMAGE_PATH_PREFIX + "boat1.jpg");
imgs.push_back(img);
img=imread(IMAGE_PATH_PREFIX+"boat2.jpg");
imgs.push_back(img);
img=imread(IMAGE_PATH_PREFIX+"boat3.jpg");
imgs.push_back(img);
img=imread(IMAGE_PATH_PREFIX+"boat3.jpg");
imgs.push_back(img);
img=imread(IMAGE_PATH_PREFIX+"boat4.jpg");
imgs.push_back(img);
img=imread(IMAGE_PATH_PREFIX+"boat5.jpg");
imgs.push_back(img);
img=imread(IMAGE_PATH_PREFIX+"boat6.jpg");
imgs.push_back(img);

Mat pano;//拼接结果图片
//Stitcher stitcher = Stitcher::createDefault(try_use_gpu);
Stitcher stitcher = Stitcher::createDefault(true);
Stitcher::Status status = stitcher.stitch(imgs, pano);

if (status != Stitcher::OK)
{
cout << "Can't stitch images, error code = " << int(status) << endl;
return -1;
}

imwrite(result_name, pano);
}

int main_test_feature_algo(){
#ifdef HAVE_OPENCV_XFEATURES2D
cout << "Surf" << endl;
#else
cout << "Orb" << endl;
#endif
}

```

当然你也可以看下opencv-3.0.0/samples/cpp/stitching.cpp的代码

 

效果图:

目录
相关文章
|
4月前
|
计算机视觉 Python
OpenCV 4基础篇| OpenCV图像的拼接
OpenCV 4基础篇| OpenCV图像的拼接
|
4月前
|
计算机视觉
OpenCV(十):图像缩放、翻转、拼接的介绍与使用
OpenCV(十):图像缩放、翻转、拼接的介绍与使用
101 0
|
4月前
|
计算机视觉 Python
OpenCV图像处理-图片拼接(Python)
1. 图片拼接原理 对于图像拼接主要分为两部分:1.特征点匹配,确定两幅图之间的位置关系;2.把所有图像投影变换到同一坐标系,并完成对接与融合。
174 0
|
11月前
|
小程序
OpenCV-图像拼接(横向拼接&纵向拼接)
OpenCV-图像拼接(横向拼接&纵向拼接)
102 0
|
监控 算法 机器人
Baumer工业相机堡盟相机如何通过BGAPI SDK联合OpenCV进行图像简单拼接和显示(C++)
Baumer工业相机堡盟相机如何通过BGAPI SDK联合OpenCV进行图像简单拼接和显示(C++)
87 0
|
机器学习/深度学习 编解码 算法
openCV 第四篇 角点检测、图像特征、图片拼接
openCV 第四篇 角点检测、图像特征、图片拼接
openCV 第四篇 角点检测、图像特征、图片拼接
|
20天前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
32 4
|
30天前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
WK
|
28天前
|
编解码 计算机视觉 Python
如何在OpenCV中进行图像转换
在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
WK
60 1
|
1月前
|
机器人 计算机视觉
巧用 OpenCV solvePnP() 函数完成由图像坐标系到机器人坐标系的转换(二维坐标系之间的转换)
巧用 OpenCV solvePnP() 函数完成由图像坐标系到机器人坐标系的转换(二维坐标系之间的转换)
44 2