在opencv c ++中使用Stitcher类无法拼接许多图像

时间:2017-03-17 13:49:25

标签: opencv image-processing image-stitching opencv-stitching

我想在塑料部件的直表面的单个图像中缝合许多图像(25)。图像看起来像这样:

enter image description here enter image description here enter image description here enter image description here

我正在尝试使用Stitcher类窗体opencv。我的代码在这里:

#include <iostream>
#include <fstream>
#include "opencv2/highgui/highgui.hpp"
#include <opencv2/stitching.hpp>

using namespace std;
using namespace cv;

bool try_use_gpu = false;
vector<Mat> imgs;
string result_name = "result.jpg";
Mat img1, img2,img3,img4,img5,img6,img7, pano;

void printUsage();
//int parseCmdArgs(int argc, char** argv);

int main(int argc, char* argv[])
{
    // Load images from HD.
    img1 = imread("1.bmp");
    img2 = imread("2.bmp");
    img3 = imread("3.bmp");
    img4 = imread("4.bmp"); 

    // Put images into vector of images "imgs".
    imgs.push_back(img1);
    imgs.push_back(img2);
    imgs.push_back(img3);
    imgs.push_back(img4);   

    // Create stitcher instance and use stitch method with imgs.
    Stitcher stitcher = Stitcher::createDefault(try_use_gpu);
    stitcher.setPanoConfidenceThresh(0.8);
    Stitcher::Status status = stitcher.stitch(imgs, pano);

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

    imwrite(result_name, pano);

    return 0;
}

我总是得到一个错误说:“无法拼接图像,错误代码= 1”,因此系统说它需要更多图像。调试时,我看到图像已正确加载,然后正确创建了矢量图像。可能是什么原因?我的计算也持续了很长时间(2秒)...

1 个答案:

答案 0 :(得分:2)

OpenCV的拼接模块使用图像功能来创建精确对齐。

作为拇指规则,两个必须缝合的图像之间应该有大约20-30%的重叠。如果摄像机区域之间没有明显重叠,则图像交叉点之间不会有足够的功能。您给出的图像具有非常均匀的背景,以便拼接器模块在图像交叉点中找到足够的特征。您需要查看增加图像交叉点中的特征以对齐图像。