python图像拼接_python实现图像拼接
本文实例为大家分享了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实现图像拼接相关推荐
- python 碎片图像拼接_python实现图像拼接
本文实例为大家分享了python实现图像拼接的具体代码,供大家参考,具体内容如下 1.待拼接的图像 2. 基于SIFT特征点和RANSAC方法得到的图像特征点匹配结果 3.图像变换结果 4.代码及注意 ...
- python 图像拼接_python实现图像拼接功能
利用Python将Market1501的分割图片和原图两张图片进行拼接成一左一右一张图片,并将图片的像素值调整成256*128. 所有文件夹: 文件夹下的所有原图: 文件夹下的所有的分割图片: 代码如 ...
- python图像拼接_python opencv 图像拼接的实现方法
初级的图像拼接为将两幅图像简单的粘贴在一起,仅仅是图像几何空间的转移与合成,与图像内容无关.高级图像拼接也叫作基于特征匹配的图像拼接,拼接时消去两幅图像相同的部分,实现拼接合成全景图. 具有相同尺寸的 ...
- python最全的图像拼接
python最全的图像拼接 文章目录: 一.用matplotlib实现图像的拼接 二.用PIL实现图像的拼接 1.PIL实现长图的拼接 2.PIL实现照片墙拼接 三.直接通过numpy 进行数组值的拼 ...
- 使用Python和OpenCV进行图像拼接和全景图构建
使用Python和OpenCV进行图像拼接和全景图构建 1. 效果图 2. 原理及步骤 3. 源码 3.1 拼接类源码 3.2 拼接用到的工具类 3.3 叠加多张图像源码 参考 这篇博客将介绍如何使用 ...
- python画代码-Python教程_Python画Mandelbrot集 代码
Python教程_Python画Mandelbrot集 代码 作者:Comet 来源: 课课家 www.kokojia.com点击数:278发布时间:2015-06-19 11:17:19 曼德勃罗集 ...
- c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...
用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...
- M×N扫描序列图像拼接、大视场图像拼接、全景图像拼接、2D网格拼图方法、累计误差消除(显微图像/航拍图像等)
M×N扫描序列图像拼接.大视场图像拼接.全景图像拼接.2D网格拼图方法.累计误差消除(显微图像/航拍图像等) 前言 一.问题描述 二.拼接过程存在的问题 三.4种拼接算法介绍 1.搜索算法 2.最小生 ...
- python编程语言_python编程语言的简要历史
python编程语言 The Python programming language is a general-purpose programming language that has carved ...
最新文章
- Dev-C++安装和使用教程(手把手傻瓜式教学)
- 给一张表加一个自动编号字段_可视化仪表板快速入门教程,10分钟做一张销售分析仪表板...
- webpack项目上传云服务器,webpack项目上传云服务器
- Java并发编程中的若干核心技术,向高手进阶
- xp与Vista双系统 相关问题
- 正弦定理和余弦定理_苏州市高一数学(正弦定理与余弦定理)线上教育学案
- 为什么操作dom会消耗性能
- 并查集之团伙(codevs)
- ccf运行错误是什么原因_正压送风机运行中叶轮裂纹产生原因是什么?
- 优先级队列之PriorityQueue
- php+select为空,SELECT时候,如何处理某字段空值?
- python3-基础2
- kali 安装vmware 14 for linux 出现问题
- python图片分类毕业设计成果报告书_毕业设计成果报告书.pdf
- 长字符串的算术编码matlab,算术编码及MATLAB实现
- 数据安全传输平台项目笔记
- 解决eclips代码批量首行缩进 退格 调试
- html5图片中加入文字,HTML肿么在图片上添加文字,也就是图片作为背景,代码和图像显示如下...
- iOS13文件的连接服务器
- 软件设计原则之里氏替换原则、依赖倒置原则
热门文章
- 拉普拉斯变换的定义-笔记
- Enolsoft PDF Converter with OCR mac(带有OCR的PDF转换器)
- 2021年塔式起重机司机复审考试及塔式起重机司机考试试题
- 陀螺产业区块链第九季 | 如何用区块链搭建营销激励模型?
- python代理ip多进程_静听网+python爬虫+多线程+多进程+构建IP代理池
- 网页中的动漫人物互动——看板娘
- LVGL官方文档-7.11.0-5-Porting-Input device interface
- 如何使用sql语句算两经纬度的距离
- 实现163邮箱发送邮件功能
- 2018 6 11 没有触角的蚂蚁