OpenCV中的全景拼接例程
使用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张图片,秒出。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | //图像拼接 //哦,这个程序是最简单的拼接,最傻瓜的那种,不必知道拼接的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的代码
效果图:
Greatness is never a given, it must be earned.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧