当前位置:   article > 正文

利用C++中的opencv进行图像拼接

利用C++中的opencv进行图像拼接


这篇文章依旧是记录采用C++复现图像拼接过程解决遇到的问题。因为自己没有学过C++,大学学的C考完试立马还给老师了,Python也是现学的,只会一点点MATLAB,所以遇到的问题和解决都很基础,目的是自己做一些记录,并分享给与我相同的图像入门小白,若有错误还希望大佬们指正。

一、拼接方法介绍

拼接的主要参考文献:

OpenCV常用图像拼接方法(二):基于模板匹配拼接_Color Space的博客-CSDN博客_图像拼接素材

图像拼接的程序的目的是将imgL(1)与imgR(2)拼接起来,方法是通过截取imgL中的一小部分特征区域与imgR的图像进行比对,找到最相似的区域坐标,以此作为拼接的联系坐标,将两幅图拼接起来(大白话就是将两图最相似的区域对齐叠起来达到拼接效果。)

  1. Mat imgL = imread("A.jpg");
  2. Mat imgR = imread("B.jpg");
  3. double start = getTickCount();
  4. Mat grayL, grayR;
  5. cvtColor(imgL, grayL, COLOR_BGR2GRAY);
  6. cvtColor(imgR, grayR, COLOR_BGR2GRAY);
  7. Rect rectCut = Rect(372, 122, 128, 360);
  8. Rect rectMatched = Rect(0, 0, imgR.cols / 2, imgR.rows);
  9. Mat imgTemp = grayL(Rect(rectCut));
  10. Mat imgMatched = grayR(Rect(rectMatched));
  11. int width = imgMatched.cols - imgTemp.cols + 1;
  12. int height = imgMatched.rows - imgTemp.rows + 1;
  13. Mat matchResult(height, width, CV_32FC1);
  14. matchTemplate(imgMatched, imgTemp, matchResult, TM_CCORR_NORMED);
  15. normalize(matchResult, matchResult, 0, 1, NORM_MINMAX, -1); //归一化到0--1范围
  16. double minValue, maxValue;
  17. Point minLoc, maxLoc;
  18. minMaxLoc(matchResult, &minValue, &maxValue, &minLoc, &maxLoc);
  19. Mat dstImg(imgL.rows, imgR.cols + rectCut.x - maxLoc.x, CV_8UC3, Scalar::all(0));
  20. Mat roiLeft = dstImg(Rect(0, 0, imgL.cols, imgL.rows));
  21. imgL.copyTo(roiLeft);
  22. Mat debugImg =
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/1011673
推荐阅读
相关标签
  

闽ICP备14008679号