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实现图像拼接
本文地址: http://www.cppcns.com/jiaoben/python/302187.html
python图像拼接融合_python实现图像拼接相关推荐
- python图像拼接_python opencv 图像拼接的实现方法
初级的图像拼接为将两幅图像简单的粘贴在一起,仅仅是图像几何空间的转移与合成,与图像内容无关.高级图像拼接也叫作基于特征匹配的图像拼接,拼接时消去两幅图像相同的部分,实现拼接合成全景图. 具有相同尺寸的 ...
- stitching.cpp鱼眼图像拼接融合 源码分析
之前运行OpenCV官方示例的cpp时 看到stitching.cpp拼接融合还不错 然后我在MATLAB上 用之前编的经纬映射法校正三幅鱼眼图像后 不知道该怎样保存下校正好的图 如果save或者sa ...
- [开源项目]基于FPGA的视频图像拼接融合
基于FPGA的视频图像拼接融合 本项目简单来说,就是实时生成视频全景图,该架构经过优化,可以实时视频输出. 算法 下图说明了描述算法每个步骤的系统框图 该系统大致可以分为三个子系统: 预处理 基于 S ...
- 图像融合——stitching.cpp鱼眼图像拼接融合(01)
stitching.cpp鱼眼图像拼接融合 源码分析. https://blog.csdn.net/wd1603926823/article/details/48846099 之前运行OpenCV官方 ...
- 利用python语言实现多张图像拼接
目录 图像映射与全景拼接 图像拼接基本流程 1.基础流程 2.计算图像间的变换结构 图像拼接相关原理 1.2D图像变换原理 2.特征点错误匹配干扰 3.APAP算法 4.RANSAC方法图像拼接 算法 ...
- 基于SIFT特征的图像拼接融合(matlab+vlfeat实现)
基于SIFT特征的图像拼接融合(matlab+vlfeat实现) piccolo,之前做的东西,简单整理下,不是做图像方向的,写的不好轻喷 主要原理参看SIFT算法详解和SIFT特征匹配算法介绍--寻 ...
- C++ OpenCV 图像拼接融合
目录 一:需求分析 二:步骤详解 三:完整源码分享 四:多张图像拼接 Stitcher算法 一:需求分析 将下面两张图像进行拼接 拼接得到一张完整的图像 二:步骤详解 1.选择特征点 //1.选择特 ...
- Python学习教程(Python学习视频_Python学些路线):Day05 总结和练习
Python学习教程(Python学习视频_Python学些路线):总结和练习 练习清单 寻找"水仙花数". 寻找"完美数". "百钱百鸡" ...
- 视频教程-快速入门Python基础教程_Python基础知识大全-Python
快速入门Python基础教程_Python基础知识大全 十余年计算机技术领域从业经验,在中国电信.盛大游戏等多家五百强企业任职技术开发指导顾问,国内IT技术发展奠基人之一. 杨千锋 ¥99.00 立即 ...
最新文章
- 制作生成静态页面的新闻系统
- gulp编译less简单demo
- 程序员面试金典 - 面试题 04.02. 最小高度树(二叉搜索树中序遍历)
- 阿里云ACE认证之理解CDN技术
- 什么叫基于web的网站_选择离开家乡在外打工,学门什么专业的技术更有前途呢?-WEB资讯专栏-DMOZ中文网站分类目录...
- mysql 主从关系切换
- python自动化框架学习-pyautogui
- SpringSecurity半成品笔记
- 【Android游戏开发之四】Android 游戏框架(一个游戏角色在屏幕行走的demo)
- PNG转ICO在线转换
- 1386 - Cellular Automaton
- win10计算机管理员权限删除,win10删除需管理员权限的文件最佳解决方法
- php 星期几大写,php日期转大写
- RK系列SDK -- Android HFP蓝牙通话音频处理(蓝牙音箱方案)
- oracle 查询带引号,oracle查询带有单引号的 -电脑资料
- 实验题7.1 实现二分查找的算法
- 干货集中营app制作
- Halide学习笔记----Halide tutorial源码阅读2
- 数据增强系列(2)如何使用Augly库进行数据增强
- BZOJ 4811([Ynoi2017]由乃的OJ-树链剖分)