-1
Q
全景圖拼接算法
A
回答
0
如果你知道在你的拍攝圖像,您可以按照此代碼爲您的拼接圖像一起順序。如果訂單未知,那麼解決方案會變得更加複雜。此外,此代碼是爲相同大小的圖像而設計的,如果您的相機被移動了,它可能會導致一些錯誤的結果。實施一些檢查以便正確理解。您可以參考這篇文章「http://ramsrigoutham.com/2012/11/22/panorama-image-stitching-in-opencv/」,以更好地理解主要調用兩次的拼接功能。
#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/nonfree/nonfree.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
void stitching(cv::Mat&,cv::Mat& ,cv::Mat&);
int main()
{
Mat image1= imread("image1.jpg");
Mat image2= imread("image2.jpg");
Mat image3= imread("image3.jpg");
Mat gray_image1;
Mat gray_image2;
Mat gray_image3;
Mat result1,result2;
// Convert to Grayscale
cvtColor(image1, gray_image1, CV_RGB2GRAY);
cvtColor(image2, gray_image2, CV_RGB2GRAY);
cvtColor(image3, gray_image3, CV_RGB2GRAY);
stitching(gray_image1,gray_image2,result1);
stitching(result1,gray_image3,result2);
cv::imshow("stitched image"result2);
cv::WaitKey(0);
}
void stitching(cv::Mat& im1,cv::Mat& im2,cv::Mat& stitch_im)
{
int minHessian = 400;
SurfFeatureDetector detector(minHessian);
std::vector<KeyPoint> keypoints_object, keypoints_scene;
detector.detect(im1, keypoints_object);
detector.detect(im2, keypoints_scene);
SurfDescriptorExtractor extractor;
Mat descriptors_object, descriptors_scene;
extractor.compute(im1, keypoints_object, descriptors_object);
extractor.compute(im2, keypoints_scene, descriptors_scene);
FlannBasedMatcher matcher;
std::vector<DMatch> matches;
matcher.match(descriptors_object, descriptors_scene, matches);
double max_dist = 0; double min_dist = 100;
for(int i = 0; i < descriptors_object.rows; i++)
{ double dist = matches[i].distance;
if(dist < min_dist) min_dist = dist;
if(dist > max_dist) max_dist = dist;
}
std::vector<DMatch> good_matches;
for(int i = 0; i < descriptors_object.rows; i++)
{ if(matches[i].distance < 3*min_dist)
{ good_matches.push_back(matches[i]); }
}
std::vector<Point2f> obj;
std::vector<Point2f> scene;
for(int i = 0; i < good_matches.size(); i++)
{
obj.push_back(keypoints_object[ good_matches[i].queryIdx ].pt);
scene.push_back(keypoints_scene[ good_matches[i].trainIdx ].pt);
}
Mat H = findHomography(obj, scene, CV_RANSAC);
cv::Mat result;
warpPerspective(im1,stitch_im,H,cv::Size(im1.cols+im2.cols,im1.rows));
}
相關問題
- 1. 拼接全景圖像
- 2. Opencv圖像拼接或全景
- 3. 使用EmguCV全景圖像拼接
- 4. 圖像拼接爲一張臉的全景
- 5. Cubemap算法的全景圖片
- 6. 無法拼接圖像
- 7. 圖像拼接
- 8. 算法拼圖的測試用例
- 9. 推薦算法編程拼圖
- 10. 用A *算法解決8拼圖
- 11. 照片拼接/全景API/DLL /庫任何人?
- 12. 是否可以在Java中使用Android進行全景圖像拼接?
- 13. 多圖像放置算法 - 拼貼算法
- 14. R拼接圖像
- 15. 圖像拼接&OCR
- 16. OpenCV - 圖像拼接
- 17. JavaScript或運算符拼圖
- 18. 拼合表達式算法
- 19. 拼寫校正算法
- 20. 重構拼圖圖像 - 拼圖解算器
- 21. 15拼圖背景圖片JavaScript/CSS
- 22. 鋼琴拼圖:背景圖像
- 23. 圖像拼接方法去除接縫爲縫合圖像
- 24. 是否有任何Autopano服務器替代或自動全景拼接/視頻全景開源?
- 25. 使用拼接將圖像url設置爲背景屬性
- 26. 在另一幅圖像中搜索圖像的算法。 (拼貼)
- 27. Xamarin Forms ContentPage背景圖片拼貼
- 28. 在Python中拼接圖像
- 29. 拼接2圖像(OpenCV)
- 30. 在iOS上拼接圖像
請提供更多詳情。 – Piglet
查看[Wiki:autostitch](https://en.wikipedia.org/wiki/AutoStitch)它是如何工作的。當您運行拼接算法時,您將獲得每個圖像的變換矩陣,以便將其轉換爲多邊形,並將它們的相交/重疊計算爲幾何問題。 – Spektre