• Opencv 使用Stitcher类图像拼接生成全景图像


    Opencv中自带的Stitcher类可以实现全景图像,效果不错。下边的例子是Opencv Samples中的stitching.cpp的简化,源文件可以在这个路径里找到:

    opencvsourcessamplescppstitching.cpp


    #include <fstream>
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/stitching/stitcher.hpp"
    #include <iostream>
    
    using namespace cv;
    using namespace std;
    
    vector<Mat> imgs; //保存拼接的原始图像向量
    
    //导入所有原始拼接图像函数
    void parseCmdArgs(int argc, char** argv);
    
    int main(int argc, char* argv[])
    {
    	//导入拼接图像
    	parseCmdArgs(argc, argv);	
    	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;
    		return -1;
    	}
    	namedWindow("全景拼接",0);
    	imshow("全景拼接",pano);
    	imwrite("D:\全景拼接.jpg",pano);
    	waitKey();   
    	return 0;
    }
    
    //导入所有原始拼接图像函数
    void parseCmdArgs(int argc, char** argv)
    {
    	for(int i=1;i<argc;i++)
    	{
    		Mat img = imread(argv[i]);
    		if (img.empty())
    		{
    			cout << "Can't read image '" << argv[i] << "'
    ";
    		}
    		imgs.push_back(img);
    	}
    }
    


    图1:


    图2:


    图3:


    图4:


    图5:



    5个图片的拍摄角度合起来在180°左右,没有经过压缩的,下载下来可以直接测试使用,传入顺序随意,Stitcher会自动排列。全景拼接效果很赞:



  • 相关阅读:
    Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析
    Linq分区操作之Skip,SkipWhile,Take,TakeWhile源码分析
    Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析
    Linq基础操作之Select,Where,OrderBy,ThenBy源码分析
    PAT 1152 Google Recruitment
    PAT 1092 To Buy or Not to Buy
    PAT 1081 Rational Sum
    PAT 1084 Broken Keyboard
    PAT 1077 Kuchiguse
    PAT 1073 Scientific Notation
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411952.html
Copyright © 2020-2023  润新知