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介绍较少,

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

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

目录
相关文章
|
小程序
OpenCV-图像拼接(横向拼接&纵向拼接)
OpenCV-图像拼接(横向拼接&纵向拼接)
115 0
|
计算机视觉
【OpenCV图像处理13】图像拼接
【OpenCV图像处理13】图像拼接
196 0
|
机器学习/深度学习 算法 机器人
计算机视觉教程7-2: 基于OpenCV的多图像拼接、配准与美化
计算机视觉教程7-2: 基于OpenCV的多图像拼接、配准与美化
712 0
计算机视觉教程7-2: 基于OpenCV的多图像拼接、配准与美化
|
1月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
334 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
2月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
49 4
|
2月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
3月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
WK
|
3月前
|
编解码 计算机视觉 Python
如何在OpenCV中进行图像转换
在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
WK
108 1
|
5月前
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
168 1
|
5月前
|
运维 算法 计算机视觉
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
79 1