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

1.待拼接的图像

2. 基于SIFT特征点和RANSAC方法得到的图像特征点匹配结果

3.图像变换结果

4.代码及注意事项

import cv2

import numpy as np

def cv_show(name, image):

cv2.imshow(name, image)

cv2.waitKey(0)

cv2.destroyAllWindows()

def detectAndCompute(image):

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

sift = cv2.xfeatures2d.SIFT_create()

(kps, features) = sift.detectAndCompute(image, None)

kps = np.float32([kp.pt for kp in kps]) # 得到的点需要进一步转换才能使用

return (kps, features)

def matchKeyPoints(kpsA, kpsB, featuresA, featuresB, ratio = 0.75, reprojThresh = 4.0):

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

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

matcher = cv2.BFMatcher()

rawMatches = matcher.knnMatch(featuresA, featuresB, 2)

matches = []

for m in rawMatches:

if len(m) == 2 and m[0].distance < ratio * m[1].distance:

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

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

kpsB = np.float32([kpsB[m[1]] for m in matches])

(M, status) = cv2.findHomography(kpsA, kpsB, cv2.RANSAC, reprojThresh)

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

def stich(imgA, imgB, M):

result = cv2.warpPerspective(imgA, M, (imgA.shape[1] + imgB.shape[1], imgA.shape[0]))

result[0:imageA.shape[0], 0:imageB.shape[1]] = imageB

cv_show('result', result)

def drawMatches(imgA, imgB, kpsA, kpsB, matches, status):

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

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

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

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

drawImg[0:hB, 0:wB] = imageB

drawImg[0:hA, wB:] = imageA

for ((queryIdx, trainIdx),s) in zip(matches, status):

if 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(drawImg, pt1, pt2, (0, 0, 255))

cv_show("drawImg", drawImg)

# 读取图像

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

cv_show("imageA", imageA)

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

cv_show("imageB", imageB)

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

(kpsA, featuresA) = detectAndCompute(imageA)

(kpsB, featuresB) = detectAndCompute(imageB)

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

(M, matches, status) = matchKeyPoints(kpsA, kpsB, featuresA, featuresB)

# 绘制匹配结果

drawMatches(imageA, imageB, kpsA, kpsB, matches, status)

# 拼接

stich(imageA, imageB, M)

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

python图像拼接_python实现图像拼接相关推荐

  1. python 碎片图像拼接_python实现图像拼接

    本文实例为大家分享了python实现图像拼接的具体代码,供大家参考,具体内容如下 1.待拼接的图像 2. 基于SIFT特征点和RANSAC方法得到的图像特征点匹配结果 3.图像变换结果 4.代码及注意 ...

  2. python 图像拼接_python实现图像拼接功能

    利用Python将Market1501的分割图片和原图两张图片进行拼接成一左一右一张图片,并将图片的像素值调整成256*128. 所有文件夹: 文件夹下的所有原图: 文件夹下的所有的分割图片: 代码如 ...

  3. python图像拼接_python opencv 图像拼接的实现方法

    初级的图像拼接为将两幅图像简单的粘贴在一起,仅仅是图像几何空间的转移与合成,与图像内容无关.高级图像拼接也叫作基于特征匹配的图像拼接,拼接时消去两幅图像相同的部分,实现拼接合成全景图. 具有相同尺寸的 ...

  4. python最全的图像拼接

    python最全的图像拼接 文章目录: 一.用matplotlib实现图像的拼接 二.用PIL实现图像的拼接 1.PIL实现长图的拼接 2.PIL实现照片墙拼接 三.直接通过numpy 进行数组值的拼 ...

  5. 使用Python和OpenCV进行图像拼接和全景图构建

    使用Python和OpenCV进行图像拼接和全景图构建 1. 效果图 2. 原理及步骤 3. 源码 3.1 拼接类源码 3.2 拼接用到的工具类 3.3 叠加多张图像源码 参考 这篇博客将介绍如何使用 ...

  6. python画代码-Python教程_Python画Mandelbrot集 代码

    Python教程_Python画Mandelbrot集 代码 作者:Comet 来源: 课课家 www.kokojia.com点击数:278发布时间:2015-06-19 11:17:19 曼德勃罗集 ...

  7. c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...

    用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...

  8. M×N扫描序列图像拼接、大视场图像拼接、全景图像拼接、2D网格拼图方法、累计误差消除(显微图像/航拍图像等)

    M×N扫描序列图像拼接.大视场图像拼接.全景图像拼接.2D网格拼图方法.累计误差消除(显微图像/航拍图像等) 前言 一.问题描述 二.拼接过程存在的问题 三.4种拼接算法介绍 1.搜索算法 2.最小生 ...

  9. python编程语言_python编程语言的简要历史

    python编程语言 The Python programming language is a general-purpose programming language that has carved ...

最新文章

  1. Dev-C++安装和使用教程(手把手傻瓜式教学)
  2. 给一张表加一个自动编号字段_可视化仪表板快速入门教程,10分钟做一张销售分析仪表板...
  3. webpack项目上传云服务器,webpack项目上传云服务器
  4. Java并发编程中的若干核心技术,向高手进阶
  5. xp与Vista双系统 相关问题
  6. 正弦定理和余弦定理_苏州市高一数学(正弦定理与余弦定理)线上教育学案
  7. 为什么操作dom会消耗性能
  8. 并查集之团伙(codevs)
  9. ccf运行错误是什么原因_正压送风机运行中叶轮裂纹产生原因是什么?
  10. 优先级队列之PriorityQueue
  11. php+select为空,SELECT时候,如何处理某字段空值?
  12. python3-基础2
  13. kali 安装vmware 14 for linux 出现问题
  14. python图片分类毕业设计成果报告书_毕业设计成果报告书.pdf
  15. 长字符串的算术编码matlab,算术编码及MATLAB实现
  16. 数据安全传输平台项目笔记
  17. 解决eclips代码批量首行缩进 退格 调试
  18. html5图片中加入文字,HTML肿么在图片上添加文字,也就是图片作为背景,代码和图像显示如下...
  19. iOS13文件的连接服务器
  20. 软件设计原则之里氏替换原则、依赖倒置原则

热门文章

  1. 拉普拉斯变换的定义-笔记
  2. Enolsoft PDF Converter with OCR mac(带有OCR的PDF转换器)
  3. 2021年塔式起重机司机复审考试及塔式起重机司机考试试题
  4. 陀螺产业区块链第九季 | 如何用区块链搭建营销激励模型?
  5. python代理ip多进程_静听网+python爬虫+多线程+多进程+构建IP代理池
  6. 网页中的动漫人物互动——看板娘
  7. LVGL官方文档-7.11.0-5-Porting-Input device interface
  8. 如何使用sql语句算两经纬度的距离
  9. 实现163邮箱发送邮件功能
  10. 2018 6 11 没有触角的蚂蚁