【OpenCV学习】计算两幅图像的重叠区域

这篇博客介绍如何计算两幅图像的重叠部分。通过将问题转化为多边形求交,结合图像匹配和单应矩阵应用,标识出两图像在原始位置的重叠区域。算法包括图像匹配获取单应矩阵、计算转换后的点集、求多边形交集以及还原原始点集。代码实现中参考了多边形求交集的方法。
摘要由CSDN通过智能技术生成

问题描述:已知两幅图像Image1和Image2,计算出两幅图像的重叠区域,并在Image1和Image2标识出重叠区域。

算法思想:

若两幅图像存在重叠区域,则进行图像匹配后,会得到一张完整的全景图,因而可以转换成图像匹配问题。

图像匹配问题,可以融合两幅图像,得到全景图,但无法标识出在原图像的重叠区域。

将两幅图像都理解为多边形,则其重叠区域的计算,相当于求多边形的交集。

通过多边形求交,获取重叠区域的点集,然后利用单应矩阵还原在原始图像的点集信息,从而标识出重叠区域。

算法步骤:

1.图像匹配计算,获取单应矩阵。

2.根据单应矩阵,计算图像2的顶点转换后的点集。

3.由图像1的顶点集合和图像2的转换点集,计算多边形交集。

4.根据单应矩阵的逆,计算多边形的交集在图像2中的原始点集。

代码实现如下所示:

  1 bool ImageOverlap(cv::Mat &img1,cv::Mat &img2,std::vector<cv::Point> &vPtsImg1,std::vector<cv::Point> &vPtsImg2)
  2 {
  3     cv::Mat g1(img1,Rect(0,0,img1.cols,img1.rows));
  4     cv::Mat g2(img2,Rect(0,0,img2.cols,img2.rows));
  5 
  6     cv::cvtColor(g1,g1,CV_BGR2GRAY);
  7     cv::cvtColor(g2,g2,CV_BGR2GRAY);
  8 
  9     std::vector<cv::KeyPoint> keypoints_roi, keypoints_img;  /* keypoints found using SIFT */
 10     cv::Mat descriptor_roi, descriptor_img;             /* Descriptors for SIFT */
 11     cv::FlannBasedMatcher matcher;                      /* FLANN based matcher to match keypoints */
 12     std::vector<cv::DMatch> matches, good_matches;
 13     cv::SIFT sift;
 14     int i, dist=80;
 15 
 16     sift(g1, Mat(), keypoints_roi, descriptor_roi);      /* get keypoints of ROI image */
 17     sift(g2, Mat(), keypoints_img, descriptor_img);         /* get key
计算两张图像重叠度可以使用OpenCV来实现。首先,需要利用OpenCV的函数计算出两张图像重叠区域。这可以通过计算两个矩形的交集来完成,而矩形的位置可以通过找到图像中的轮廓得到。具体的步骤如下: 1. 使用OpenCV的函数找到Image1和Image2中的轮廓。可以使用findContours函数来实现。 2. 遍历Image1和Image2中的所有轮廓,并使用boundingRect函数计算每个轮廓的包围矩形。 3. 利用boundingRect函数得到的矩形信息,计算出两个矩形的交集区域,可以使用两个矩形的左上角和右下角坐标来计算。 4. 根据交集区域的宽度和高度,可以计算重叠度。重叠度可以定义为交集区域的面积除以两个矩形中较小矩形的面积。 5. 最后,可以在Image1和Image2上标识出重叠区域,可以使用rectangle函数来绘制矩形框。 总结来说,计算两张图像重叠度需要进行以下步骤: 1. 找到图像中的轮廓。 2. 计算轮廓的包围矩形。 3. 计算两个矩形的交集区域。 4. 计算重叠度。 5. 在图像上标识出重叠区域。 参考资料: 利用opencv计算俩张图片的重叠率,计算结果准确。涉及到计算几何中计算矩形重叠率的算法,对矩形没有任何要求限制。 问题描述:已知两幅图像Image1和Image2,计算两幅图像重叠区域,并在Image1和Image2标识出重叠区域。 http://www.cnblogs.com/dwdxdy/p/3232110.html<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++利用opencv计算俩图片的重叠率](https://download.csdn.net/download/qiang_csdn/10720579)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [计算两幅图像重叠区域](https://blog.csdn.net/qq_15295565/article/details/89402644)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值