文章出處
文章列表
使用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的代碼
效果圖:
文章列表
全站熱搜