본문 바로가기

Computer Vision by OpenCV

파노라마, panorama by OpenCV 3.2

반응형





ㅇ OpenCV (3.2.0)을 이용한 파노라마 생성

  - OpenCV에서는 여러 장의 사진을 합쳐서 하나의 파노라마 사진을 만들어내기 위한
  - Stitcher 클래스를 제공한다.
  - 이 클래스는 사진을 하나로 합치는 옵션을 2개 제공하는데,
  - SCANS와 PANORAMA이다.

ㅇ 다음 3장의 사진들이 주어졌을 때,


ㅇSCANS 모드로 파노라마를 만들면, 
 


ㅇ PANORAMA 모드로 만들면,


ㅇ C++ 구현 소스코드

#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
#include <opencv2/stitching.hpp>

int main()
{
     // 파노라마를 구성하는 사진들을 읽어서 vector에 저장한다.
     vector<Mat> imgs;

     // 3장의 이미지 이름들. sIMG_4939, ..., sIMG_4941
     int img_start_num = 4939;
     int img_end_num = 4941;

     // 파일들을 읽어서 이미지 벡터에 저장
     for (int i = img_start_num; i <= img_end_num; i++)
     {
          string _fName = "sIMG_";
          _fName = "panorama_sea/"+_fName + to_string(i) + ".jpg";
          Mat _img = imread(_fName.c_str());

          if (_img.empty() == true)
          {
               cout << "unable to read " << _fName << endl;
               return -1;
          }
          imgs.push_back(_img);
     }

     Mat pano; // 파노라마 결과
   
     // 파노라마 이미지 생성 
     Ptr<Stitcher> stitcher = Stitcher::create(Stitcher::PANORAMA, false);
     Stitcher::Status status = stitcher->stitch(imgs, pano);

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

     // 결과를 파일로 저장
     imwrite("panorama_320_scans.jpg", pano);
     cout << "Panorama creation ended successfully." << endl;
     return 0;
}



반응형

'Computer Vision by OpenCV' 카테고리의 다른 글

Histogram Equalization의 원리  (0) 2017.04.11
OpenCV normalize  (0) 2017.04.07
OpenCV Mat 이미지 형식 출력하기  (0) 2017.01.14
Connected Component Analysis  (1) 2016.07.11
Mathematical morphology (모폴로지 연산)  (0) 2016.07.11