OPENCV 图像拼接 stitching的使用

简介: 图像拼接技术,现在有非常广泛的应用,如小型机器人的单目视觉的视野较为小,使机器人在应用时有一定的局限性,双目视觉能提供更广阔的视野,双目视觉中较为常用的是对左右两个摄像头获取的识图通过拼接来获取更广阔的视野,再如较为热门的VR,Youtube也极大地运用图像拼接的技术。 图像拼接主要分为几个主要的步骤: (1)图像的校正:由于成象器件拍摄姿态和扫描非线性会引起的图象几何失

图像拼接技术,现在有非常广泛的应用,如小型机器人的单目视觉的视野较为小,使机器人在应用时有一定的局限性,双目视觉能提供更广阔的视野,双目视觉中较为常用的是对左右两个摄像头获取的识图通过拼接来获取更广阔的视野,再如较为热门的VR,Youtube也极大地运用图像拼接的技术。
图像拼接主要分为几个主要的步骤:
(1)图像的校正:由于成象器件拍摄姿态和扫描非线性会引起的图象几何失真,由于成像系统本身的原因会产生图像的畸变,通过图像的几何校正,图像的畸变校正,使获取的图像更大的接近真实的图像;
(2)图像的滤波:均值滤波,中值滤波;
(3)图像的配准:即图像的对齐,寻找图像边缘重合的部分,常用的图像匹配方法有Harris算法,SIFT算法等;
(4)建立变换模型:根据模板或者图像特征之间的对应关系,计算出数学模型中的各参数值,从而建立两幅图像的数学变换模型
(5)坐标变换:根据建立的数学转换模型,将待拼接图像转换到参考图像的坐标系中,完成统一坐标变换。
(6)图像的融合:将待拼接图像的重合区域进行融合得到拼接重构的平滑无缝全景图像。
先介绍一下opencv中自带的图像拼接例子stitching:

#include <iostream>
#include <fstream>
#include "opencv2/highgui/highgui.hpp"
#include <opencv2\stitching\stitcher.hpp>
using namespace std;
using namespace cv;

int main(void)
{
    string srcFile[3] = { "1.jpg", "2.jpg", "3.jpg" };
    string dstFile = "result.jpg";
    vector<Mat> imgs;
    for (int i = 0; i<3; ++i)
    {
        Mat img = imread(srcFile[i]);
        if (img.empty())
        {
            cout << "Can't read image '" << srcFile[i] << "'\n";
            system("pause");
            return -1;
        }
        imgs.push_back(img);
    }
    cout << "Please wait..." << endl;
    Mat pano;
    Stitcher stitcher = Stitcher::createDefault(false);
    Stitcher::Status status = stitcher.stitch(imgs, pano);
    if (status != Stitcher::OK)
    {
        cout << "Can't stitch images, error code=" << int(status) << endl;
        system("pause");
        return -1;
    }
    imwrite(dstFile, pano);
    namedWindow("Result");
    imshow("Result", pano);

    waitKey(0);

    destroyWindow("Result");
    system("pause");
    return 0;
}

先for循环读入图片,并往vector后加入一个数据;

Stitcher Stitcher::createDefault(bool try_use_gpu=false)

再用createDefault创建图像拼接的默认参数;

Status Stitcher::stitch(InputArray images, OutputArray pano)

Stitcher::stitch给出给出合成的图片;
下面是笔者合成图片的效果:
这里写图片描述

这里写图片描述
这里写图片描述

图像有点畸变(可能是拍摄时的问题),不过拼接拼接效果还是很不错的
opencv提供的API手册中对stitcher介绍较少,

这里写图片描述
这里写图片描述

接下来尝试自己用代码实现一下

目录
相关文章
|
7月前
|
小程序
OpenCV-图像拼接(横向拼接&纵向拼接)
OpenCV-图像拼接(横向拼接&纵向拼接)
|
9月前
|
计算机视觉
【OpenCV图像处理13】图像拼接
【OpenCV图像处理13】图像拼接
124 0
|
机器学习/深度学习 算法 机器人
计算机视觉教程7-2: 基于OpenCV的多图像拼接、配准与美化
计算机视觉教程7-2: 基于OpenCV的多图像拼接、配准与美化
502 0
计算机视觉教程7-2: 基于OpenCV的多图像拼接、配准与美化
|
12天前
|
计算机视觉 Python
轻松掌握opencv的8种图像变换
轻松掌握opencv的8种图像变换
|
13天前
|
算法 计算机视觉
【OpenCV】- 图像修复
【OpenCV】- 图像修复
|
13天前
|
Serverless 计算机视觉
【OpenCV】-图像的矩
【OpenCV】-图像的矩
|
13天前
|
编解码 物联网 计算机视觉
【OpenCV】—图像金子塔与图片尺寸缩放
【OpenCV】—图像金子塔与图片尺寸缩放
|
13天前
|
前端开发 计算机视觉 C++
【OpenCV】—分离颜色通道、多通道图像混合
【OpenCV】—分离颜色通道、多通道图像混合
|
13天前
|
API 计算机视觉
【OpenCV】—图像对比度、亮度值调整
【OpenCV】—图像对比度、亮度值调整
|
13天前
|
计算机视觉 索引
【OpenCV】—ROI区域图像叠加&图像混合
【OpenCV】—ROI区域图像叠加&图像混合