文章出處

使用Stitcher類,通過createDefault()方法創建拼接對象,通過stitch()方法執行默認的自動拼接。自動拼接和07年Brown和Lowe發表的論文描述的步驟基本一致,只不過使用的特征提取算法是ORB,而不是慢吞吞、有專利保護的SIFT和SURF。開源萬歲!

 

代碼內容:設置幾張圖片,扔到向量里面,然后計算全景圖。

opencv-3.0.0源碼中沒有找到測試圖片,很蛋碎。到github上找了下,發現都在[https://github.com/Itseez/opencv_extra](opencv_extra)這個項目下。。使用到了boat1.jpg~boat6.jpg

在fedora22+i53210+12G內存+全SSD條件下測試,還是有點慢的,大概5,6秒才出結果。當然,如果只有2張圖片,秒出。

代碼:

 

```

//圖像拼接
//哦,這個程序是最簡單的拼接,最傻瓜的那種,不必知道拼接的pipeline
//只需要調用createDefault()和stitch()方法就可以完成拼接

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

using namespace std;
using namespace cv;

string IMAGE_PATH_PREFIX = "/home/chris/Pictures/";

bool try_use_gpu = false;
vector<Mat> imgs;
string result_name = IMAGE_PATH_PREFIX + "result.jpg";


int main()
{
Mat img = imread(IMAGE_PATH_PREFIX + "boat1.jpg");
imgs.push_back(img);
img=imread(IMAGE_PATH_PREFIX+"boat2.jpg");
imgs.push_back(img);
img=imread(IMAGE_PATH_PREFIX+"boat3.jpg");
imgs.push_back(img);
img=imread(IMAGE_PATH_PREFIX+"boat3.jpg");
imgs.push_back(img);
img=imread(IMAGE_PATH_PREFIX+"boat4.jpg");
imgs.push_back(img);
img=imread(IMAGE_PATH_PREFIX+"boat5.jpg");
imgs.push_back(img);
img=imread(IMAGE_PATH_PREFIX+"boat6.jpg");
imgs.push_back(img);

Mat pano;//拼接結果圖片
//Stitcher stitcher = Stitcher::createDefault(try_use_gpu);
Stitcher stitcher = Stitcher::createDefault(true);
Stitcher::Status status = stitcher.stitch(imgs, pano);

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

imwrite(result_name, pano);
}

int main_test_feature_algo(){
#ifdef HAVE_OPENCV_XFEATURES2D
cout << "Surf" << endl;
#else
cout << "Orb" << endl;
#endif
}

```

當然你也可以看下opencv-3.0.0/samples/cpp/stitching.cpp的代碼

 

效果圖:


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()