opencv part 3

3.3. 1对多匹配

  • k对最佳匹配:每一个特征点在另一张图片上都会有多个最匹配的点存在,即同一个特征点对应多个匹配对象。实现方法与1对1匹配大同小异。
  • 快速完成操作,使用cv2.FlannBasedMatcher

对于小错误,可以随机抽样一致算法,即RANSAC 

ransac

 

单应性矩阵

即角度变换矩阵,简单了解应用于图像拼接

八个方程对应8个未知数,对应4个二维点

代码是ImageStiching和Stitcher

from Stitcher import Stitcher
import cv2
#读取拼接图片
imageA = cv2.imread("left_01.png")
imageB = cv2.imread("right_01.png")
#把图片拼接成全景图
stitcher = Stitcher()
(result, vis)= stitcher. stitch([imageA, imageB], showMatches=True)
#显示所有图片
cv2.imshow("Image A", imageA)
cv2.imshow("Image B", imageB)
cv2.imshow("Keypoint Matches", vis)
cv2.imshow("Result",result)
cv2.waitKey(0)
cv2.destroyAllWindows()

改完了代码回来看,老师这里讲的确实有错误,而且匹配图由于错误最后也没有演示,还是要自己改一下,问ai去吧

import numpy as np
import cv2
class Stitcher:
#拼接函数
def stitch(self, images, ratio=0.75, reprojThresh=4.0,showMatches=False):
#获取输入图片
(imageB, imageA)= images
#检测A、B图片的SIFT关键特征点,并计算特征描述子
(kpsA, featuresA)= self.detectAndDescribe(imageA)
(kpsB, featuresB)= self.detectAndDescribe(imageB)
#匹配两张图片的所有特征点,返回匹配结果
M= self.matchKeypoints(kpsA, kpsB, featuresA, featuresB, ratio, reprojThresh)
#如果返回结果为空,没有匹配成功的特征点,退出算法
if M is None:
return None
#否则,提取匹配结果
#H是3x3视角变换矩阵
(matches, H, status) = M
#将图片A进行视角变换,result是变换后图片
result= cv2.warpPerspective(imageA, H,(imageA.shape[1]+ imageB.shape[1],imageA.shape[0]))
self.cv_show('result',result)
#将图片B传入result图片最左端
result[0:imageB.shape[0], 0:imageB.shape[1]] =imageB
self.cv_show('result',result)I
#检测是否需要显示图片匹配
if showMatches:
#生成匹配图片
vis = self.drawMatches(imageA, imageB, kpsA, kpsB, matches, status)
#返回结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值