在OpenCV4.6版本下,用C++生成以下代码:使用OpenCV中的stitcher函数完成两张图片的拼接,其中特征点检测使用ORB算法
时间: 2023-06-08 19:07:28 浏览: 110
基于Opencv + ORB特征匹配算法的图像拼接c++源码(代码注释).zip
5星 · 资源好评率100%
请参考以下代码:
```
#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
// 读取两张图片
Mat img1 = imread("image1.jpg", IMREAD_GRAYSCALE);
Mat img2 = imread("image2.jpg", IMREAD_GRAYSCALE);
// 检测特征点
Ptr<FeatureDetector> detector = ORB::create();
vector<KeyPoint> keypoints1, keypoints2;
detector->detect(img1, keypoints1);
detector->detect(img2, keypoints2);
// 描述特征点
Ptr<DescriptorExtractor> extractor = ORB::create();
Mat descriptors1, descriptors2;
extractor->compute(img1, keypoints1, descriptors1);
extractor->compute(img2, keypoints2, descriptors2);
// 匹配特征点
vector<DMatch> matches;
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("BruteForce-Hamming");
matcher->match(descriptors1, descriptors2, matches);
// 筛选匹配点
vector<Point2f> points1, points2;
for (size_t i = 0; i < matches.size(); i++)
{
points1.push_back(keypoints1[matches[i].queryIdx].pt);
points2.push_back(keypoints2[matches[i].trainIdx].pt);
}
// 计算单应矩阵
Mat H = findHomography(points1, points2, RANSAC, 3);
// 拼接图片
Mat result;
warpPerspective(img1, result, H, Size(img1.cols + img2.cols, img1.rows));
Mat roi(result, Rect(img1.cols, 0, img2.cols, img2.rows));
img2.copyTo(roi);
// 显示结果
namedWindow("Result", WINDOW_NORMAL);
imshow("Result", result);
waitKey(0);
return 0;
}
```
其中,需要注意的是,需要安装OpenCV的contrib模块,以及安装OpenCV的contrib模块中的stitching模块,才能使用Stitcher函数。
阅读全文