https://my.oschina.net/xiaot99/blog/226589

一、原图

1.jpg                                        2.jpg                                            3.jpg

 二、拼接效果

1、拼接效果之一:简单拼接,有重叠,看着不太舒服

2、拼接效果之二:高级拼接,这下貌似好多了

 三、源代码(一)

#include <cv.h>
#include <highgui.h>
#include <stdlib.h>
#pragma comment(lib,"opencv_core245.lib")
#pragma comment(lib,"opencv_highgui245.lib")
int main(){    
    char* file[3]={"1.jpg","2.jpg","3.jpg"};//3张原始图片    
    IplImage* pImg[3];      
    int i;    
    
    for(i=0;i<3;++i)        
        pImg[i]=cvLoadImage(file[i]);
        
    int sw=pImg[0]->width;    
    int sh=pImg[0]->height;
    IplImage* dstImg = cvCreateImage(cvSize(sw*3,sh),pImg[0]->depth,pImg[0]->nChannels);  
      
    cvZero(dstImg);
    printf("Please wait...\n");
    
    for(i=0;i<3;++i) {          
        cvSetImageROI(dstImg, cvRect(i*sw,0,sw,sh));         
        cvCopy(pImg[i], dstImg);          
        cvResetImageROI(dstImg);    
    }
    
    cvNamedWindow("dstImg");    
    cvShowImage("dstImg", dstImg);   
    cvSaveImage("result1.jpg",dstImg);//拼接图片之一    
    
    cvWaitKey(0);    
    
    for(i=0;i<3;++i)   
        cvReleaseImage(&pImg[i]);    
        
     cvReleaseImage(&dstImg);    
     cvDestroyWindow("dstImg");      
     system("pause");    
     return 0;
}

2、源代码(二)

#include <iostream>
#include <fstream>
#include "opencv2/highgui/highgui.hpp
"#include "opencv2/stitching/stitcher.hpp"
using namespace std;
using namespace cv;
#pragma comment(lib,"opencv_core245.lib")
#pragma comment(lib,"opencv_highgui245.lib")
#pragma comment(lib,"opencv_stitching245.lib")
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;
}

注:

1、原始图片(1,2,3)来源http://blog.csdn.net/yang_xian521/article/details/7589431,缩放至1/4

2、代码(一)参考http://www.cnblogs.com/CBDoctor/archive/2011/09/19/2180998.html ,有较小改动

3、代码(二)参考OpenCV自带samples\cpp\stitching.cpp,改动较大

OpenCV图片拼接的两种方法的更多相关文章

  1. 在linux环境下编译运行OpenCV程序的两种方法

    原来以为在Ubuntu下安装好了OpenCV之后,自己写个简单的程序应该很容易吧,但是呢,就是为了编译一个简单的显示图片的程序我都快被弄崩溃了. 在谷歌和上StackOverFlow查看相关问题解答之 ...

  2. python+opencv图像变换的两种方法cv2.warpAffine和cv2.warpPerspective

    本文链接:https://blog.csdn.net/qq_27261889/article/details/80720359 # usr/bin/env python # coding: utf- ...

  3. windows下获取IP地址的两种方法

    windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...

  4. android 之 启动画面的两种方法

    现在,当我们打开任意的一个app时,其中的大部分都会显示一个启动界面,展示本公司的logo和当前的版本,有的则直接把广告放到了上面.启动画面的可以分为两种设置方式:一种是两个Activity实现,和一 ...

  5. [转载]C#读写txt文件的两种方法介绍

    C#读写txt文件的两种方法介绍 by 大龙哥 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char ...

  6. php如何防止图片盗用/盗链的两种方法(转)

    图片防盗链有什么用? 防止其它网站盗用你的图片,浪费你宝贵的流量.本文章向大家介绍php防止图片盗用/盗链的两种方法 Apache图片重定向方法 设置images目录不充许http访问 Apache服 ...

  7. WPF程序将DLL嵌入到EXE的两种方法

    WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...

  8. MongoDB实现分页(两种方法)

    1.插入实验数据 偷懒用下samus,100条. ; i < ; i++) { Document doc = new Document(); doc["ID"] = i; d ...

  9. css:图标与文字对齐的两种方法

    (好久没写博客了,这几个月的积累比较零碎,记在本子上,现在开始整理归类) 在平时写页面的过程中,常遇到要把小图标与文字对齐的情况.比如: 总结了两种方法,代码量都比较少. 第一种 对img设置竖直方向 ...

随机推荐

  1. 配置LANMP环境(2)-- 安装ifconfig命令与安装SecureCRT

    一.安装ifconfig命令 yum whatprovides ifconfig yum install net-tools 安装这个命令就是为了查看虚拟机的ip地址,SecureCRT连接必须要ip ...

  2. easyui data-options的使用

    easyui data-options的使用 data-options是jQuery Easyui 最近两个版本才加上的一个特殊属性.通过这个属性,我们可以对easyui组件的实例化可以完全写入到ht ...

  3. 第一百九十三节,jQuery EasyUI,Draggable(拖动)组件

    Draggable(拖动)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Draggable(拖动)组件的使用方法,这个组件不依赖于其 他组 ...

  4. [浪风推荐]CURL伪造IP和来源

    给“刷票”的朋友提供了很好的换IP的方案,查了下,CURL确实很强悍的可以伪造IP和来源. 1.php 请求 2.php . 1.php代码: $ch = curl_init(); curl_seto ...

  5. 多媒体开发之---h264格式详解

    http://blog.csdn.net/bluebirdssh/article/details/6533501 http://blog.csdn.net/d_l_u_f/article/detail ...

  6. 电脑出现“损坏的图像”窗口提示dll没有被指定在Windows上运行如何解决

    电脑中出现了无法运行应用程序的情况,弹出一个“***.exe - 损坏的图像”的窗口,上面提示“***.dll没有被指定在Windows上运行……”,如果我们遇到这样的问题,应该要如何解决呢? 1.我 ...

  7. python3----splitlines

    Python中的splitlines用来分割行.当传入的参数为True时,表示保留换行符 \n.通过下面的例子就很明白了: mulLine = """Hello!!! W ...

  8. 41个Web开发者必须收藏的JavaScript实用技巧

    1. 将彻底屏蔽鼠标右键 oncontextmenu=”window.event.returnValue=false” < table border oncontextmenu=return(f ...

  9. Laravel5.1 Migration数据库迁移文件

    Migration方便于团队开发,它就像数据库的版本控制一样,它的功能就是可以和别人共享你的数据库结构.这么说可能不太好理解,你跟着敲敲就明白了. 0 前提工作-配置数据库 找到你根目录的 .env ...

  10. Android开发者必知的5个开源库

    摘要:过去的时间里,Android开发逐步走向成熟.而无论出现多少Android相关的开发工具,我们每天使用的大量开源库却始终是不可或缺的.这里,向大家介绍的是,这个任劳任怨的大家庭中,最受开发者喜爱 ...