php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 429|回复: 0

Python:图像处理-图像拼接

[复制链接]

3138

主题

3148

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
威望
0
积分
7946
贡献
0
注册时间
2021-4-14
最后登录
2024-11-21
在线时间
763 小时
QQ
发表于 2022-9-23 09:28:57 | 显示全部楼层 |阅读模式
[mw_shl_code=python,true]import cv2
import numpy

#读入图像
img1=cv2.imread('C:\\Users\\liuzhaoqing\\Desktop\\1.png')
img2=cv2.imread('C:\\Users\\liuzhaoqing\\Desktop\\2.png')

#将图像转换为灰度图
gray1=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
gray2=cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)

# 建立SIFT生成器,以检测SIFT特征点
sift = cv2.xfeatures2d.SIFT_create()
#检测特征点,得到特征点集及对应的特征描述
kp1, des1= sift.detectAndCompute(gray1, None)
kp2, des2= sift.detectAndCompute(gray2, None)

#在图像上画出特征点
img01= numpy.copy(img1)
cv2.drawKeypoints(img1,kp1,img01)
cv2.imshow("img1_feature",img01)
img02= numpy.copy(img2)
cv2.drawKeypoints(img2,kp2,img02)
cv2.imshow("img2_feature",img02)

#建立暴力图像匹配器
matcher=cv2.DescriptorMatcher_create('BruteForce')

#使用KNN检测来自图1,图2的SIFT特征匹配对,K=2
K=2
matches=matcher.knnMatch(des1,des2,K)

#在图像上输出特征匹配(但这不是好的特征匹配)
result=cv2.drawMatchesKnn(gray2,kp2,gray1,kp1,matches,gray1,flags=2)
cv2.imshow("matches",result)

#对特征匹配结果进行筛选
goodmatches = []
good=[]
ratio=0.5
for m in matches:
    # 当最近距离跟次近距离的比值小于ratio值时,保留此匹配对
    if len(m) == 2 and m[0].distance < ratio * m[1].distance:
        goodmatches.append((m[0].trainIdx,m[0].queryIdx))
        good.append(m)

#在图像上输出特征匹配(这是好的特征匹配)
result=cv2.drawMatchesKnn(gray2,kp2,gray1,kp1,good,gray1,flags=2)
cv2.imshow("goodmatches",result)

#计算视觉变化矩阵
reprojThresh=3
#计算视角变化矩阵
#转换特征描述
kps1 = numpy.float32([kp.pt for kp in kp1])
kps2 = numpy.float32([kp.pt for kp in kp2])
if len(matches) > 4:
    #获得匹配对的点坐标
    p1=numpy.float32([kps1 for(_,i) in goodmatches])
    p2=numpy.float32([kps2 for(i,_) in goodmatches])
(H, status) = cv2.findHomography(p1,p2,cv2.RANSAC,reprojThresh)

#图像拼接
#将图1进行视角变换,result是变化后图片
result = cv2.warpPerspective(img1, H, (img1.shape[0] + img2.shape[0], img1.shape[1]))
#将图2与result拼接     
result[0:img2.shape[0], 0:img2.shape[1]] = img2

#输出拼接图像
cv2.imshow('result',result)

cv2.waitKey()
[/mw_shl_code]

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|php中文网 | cnphp.com ( 赣ICP备2021002321号-2 )

GMT+8, 2024-11-22 03:42 , Processed in 1.009073 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

申明:本站所有资源皆搜集自网络,相关版权归版权持有人所有,如有侵权,请电邮(fiorkn@foxmail.com)告之,本站会尽快删除。

快速回复 返回顶部 返回列表