,,python实现图像拼接

,,python实现图像拼接

这篇文章主要为大家详细介绍了大蟒实现图像拼接,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了大蟒实现图像拼接的具体代码,供大家参考,具体内容如下

1.待拼接的图像

2.基于撒特征点和兰萨克方法得到的图像特征点匹配结果

3.图像变换结果

4.代码及注意事项

导入cv2

将numpy作为铭牌导入

定义cv_show(名称,图像):

cv2.imshow(名称,图像)

cv2.waitKey(0)

cv2.destroyAllWindows()

极好的检测和计算(图像):

image=cv2.cvtColor(image,cv2 .COLOR_BGR2GRAY)

sift=cv2。xfeatures 2dsift _ create()

(kps,特色)=sift。检测和计算(图像,无)

KPS=NP。浮32([KP。KP中KP的pt])#得到的点需要进一步转换才能使用

回报(kps,功能)

定义匹配关键点(kpsA,kpsB,featuresA,featuresB,ratio=0.75,reprojThresh=4.0):

#比率是最近邻匹配的推荐阈值

# reprojThresh是随机取样一致性的推荐阈值

matcher=cv2 .BFMatcher()

原始匹配=匹配器。KNN火柴(特性a,特性b,2)

matches=[]

对于原始匹配中的男:

如果len(m)==2且米[0].距离比* m[1].距离:

matches.append((m[0]).queryIdx,m[0].trainIdx))

kpsA=NP。float 32([kpsA[m[0]]for m in matches])#使用np.float32转化列表

kpsB=NP。float 32([kpsB[m[1]]用于匹配中的m])

(M,状态)=cv2。发现单应性(kpsA,kpsB,cv2 .RANSAC,reprojThresh)

返回(M,匹配,状态)#并不是所有的点都有匹配解,它们的状态存在状态中

def stich(imgA,imgB,M):

结果=cv2。扭曲透视(imgA,M,(imgA.shape[1] imgB.shape[1],imgA.shape[0])

结果[0:imageA.shape[0],0:imageB.shape[1]]=imageB

cv_show('结果,结果)

定义抽签匹配(imgA、imgB、kpsA、kpsB)匹配、状态):

(hA,wA)=imgA.shape[0:2]

(hB,wB)=imgB.shape[0:2]

# 注意这里的3通道和uint8类型

drawImg=np.zeros((max(hA,hB),wA wB,3),' uint8 ')

绘图[0:hB,0:wB]=imageB

绘图[0:hA,wB:]=imageA

对于活力中的((queryIdx,trainIdx),s)(匹配项,状态):

如果s==1:

# 注意将float32 - int

pt1=(int(kpsB[trainIdx][0]),int(kpsB[trainIdx][1])

pt2=(int(kpsA[trainIdx][0]) wB,int(kpsA[trainIdx][1]))

cv2.line(绘图,pt1,pt2,(0,0,255))

cv_show('绘图,绘图)

# 读取图像

imageA=cv2.imread(' ./right_01.png ')

cv_show('imageA ',imageA)

imageB=cv2.imread(./left_01.png ')

cv_show('imageB ',imageB)

# 计算撒特征点和特征向量

(kpsA,featuresA)=detectAndCompute(imageA)

(kpsB,featuresB)=detectAndCompute(imageB)

# 基于最近邻和随机取样一致性得到一个单应性矩阵

(M,匹配,状态)=匹配关键点(kpsA,kpsB,featuresA,featuresB)

# 绘制匹配结果

抽奖活动(图像答:图像kpsA,kpsB,匹配、状态)

# 拼接

stich(图像一,图像b,M)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: