当前位置:   article > 正文

opencv实现几幅图像拼接成一整幅大图_多图像快速拼接 opencv

多图像快速拼接 opencv

开始尝试merge函数,具体如下:

定义四个矩阵A,B,C,D。得到矩阵combine。

  1. #include<iostream>
  2. #include <core/core.hpp>
  3. #include <opencv2/imgproc/imgproc.hpp>
  4. #include <opencv2/highgui/highgui.hpp>
  5. using namespace std;
  6. using namespace cv;
  7. int main()
  8. {
  9. cv::Mat a = (cv::Mat_<int>(2,2)<<1,2,3,4);
  10. cv::Mat b = (cv::Mat_<int>(2,2)<<5,6,7,8);
  11. cv::Mat c = (cv::Mat_<int>(2,2)<<9,10,11,12);
  12. cv::Mat d = (cv::Mat_<int>(2,2)<<13,14,15,16);
  13. std::vector<cv::Mat> v1;
  14. v1.push_back(a);
  15. v1.push_back(b);
  16. v1.push_back(c);
  17. v1.push_back(d);
  18. cv::Mat combine;
  19. cv::merge(v1, combine);
  20. cout << "combine=" <<combine<< endl;
  21. cout<<"Size of combine:"<<combine.size()<<endl;
  22. system("pause");
  23. return 0;
  24. }


结果如下:


显然,不是我们需要的结果。

尝试hconcat和vconcat函数,这两个函数opencv本身并没有。

详细介绍参见hconcatvconcat


具体实现如下:

  1. #include <iostream>
  2. #include <core/core.hpp>
  3. #include <opencv2/imgproc/imgproc.hpp>
  4. #include <opencv2/highgui/highgui.hpp>
  5. using namespace std;
  6. using namespace cv;
  7. int main()
  8. {
  9. cv::Mat a = (cv::Mat_<int>(2,2)<<1,2,3,4);
  10. cv::Mat b = (cv::Mat_<int>(2,2)<<5,6,7,8);
  11. cv::Mat c = (cv::Mat_<int>(2,2)<<9,10,11,12);
  12. cv::Mat d = (cv::Mat_<int>(2,2)<<13,14,15,16);
  13. Mat combine,combine1,combine2;
  14. hconcat(a,b,combine1);
  15. hconcat(c,d,combine2);
  16. vconcat(combine1,combine2,combine);
  17. //namedWindow("Combine",CV_WINDOW_AUTOSIZE);
  18. //imshow("Combine",combine);
  19. cout<<"Combine=:"<<combine<<endl;
  20. system("pause");
  21. return 0;
  22. }

结果:


图像拼接实现

  1. #include <iostream>
  2. #include <core/core.hpp>
  3. #include <opencv2/imgproc/imgproc.hpp>
  4. #include <opencv2/highgui/highgui.hpp>
  5. using namespace std;
  6. using namespace cv;
  7. int main()
  8. {
  9. //cv::Mat a = (cv::Mat_<int>(2,2)<<1,2,3,4);
  10. //cv::Mat b = (cv::Mat_<int>(2,2)<<5,6,7,8);
  11. //cv::Mat c = (cv::Mat_<int>(2,2)<<9,10,11,12);
  12. //cv::Mat d = (cv::Mat_<int>(2,2)<<13,14,15,16);
  13. Mat combine,combine1,combine2;
  14. Mat a=imread("1.jpg");
  15. Mat b=imread("2.jpg");
  16. Mat c=imread("3.jpg");
  17. Mat d=imread("4.jpg");
  18. hconcat(a,b,combine1);
  19. hconcat(c,d,combine2);
  20. vconcat(combine1,combine2,combine);
  21. namedWindow("Combine",CV_WINDOW_AUTOSIZE);
  22. imshow("Combine",combine);
  23. waitKey(0);
  24. //cout<<"Combine=:"<<combine<<endl;
  25. system("pause");
  26. return 0;
  27. }


图像结果显示如下:





声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/81335
推荐阅读
相关标签
  

闽ICP备14008679号