python实现
import cv2
import os
mainFolder = 'Images'
myFolders = os.listdir(mainFolder)
print(myFolders)
for folder in myFolders:
path = mainFolder +'/'+folder
images =[]
myList = os.listdir(path)
print(f'Total no of images detected {len(myList)}')
for imgN in myList:
curImg = cv2.imread(f'{path}/{imgN}')
curImg = cv2.resize(curImg,(0,0),None,0.2,0.2)
images.append(curImg)
stitcher = cv2.Stitcher.create()
(status,result) = stitcher.stitch(images)
if (status == cv2.STITCHER_OK):
print('Panorama Generated')
cv2.imshow(folder,result)
cv2.imwrite(f'{folder}.jpg',result)
cv2.waitKey(1)
else:
print('Panorama Generation Unsuccessful')
cv2.waitKey(0)
C++实现
#include <fstream>
#include "opencv2/stitching/stitcher.hpp"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.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] << "'\n";
}
imgs.push_back(img);
}
}