本文实例为大家分享了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实现图像拼接相关推荐

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

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

  2. stitching.cpp鱼眼图像拼接融合 源码分析

    之前运行OpenCV官方示例的cpp时 看到stitching.cpp拼接融合还不错 然后我在MATLAB上 用之前编的经纬映射法校正三幅鱼眼图像后 不知道该怎样保存下校正好的图 如果save或者sa ...

  3. [开源项目]基于FPGA的视频图像拼接融合

    基于FPGA的视频图像拼接融合 本项目简单来说,就是实时生成视频全景图,该架构经过优化,可以实时视频输出. 算法 下图说明了描述算法每个步骤的系统框图 该系统大致可以分为三个子系统: 预处理 基于 S ...

  4. 图像融合——stitching.cpp鱼眼图像拼接融合(01)

    stitching.cpp鱼眼图像拼接融合 源码分析. https://blog.csdn.net/wd1603926823/article/details/48846099 之前运行OpenCV官方 ...

  5. 利用python语言实现多张图像拼接

    目录 图像映射与全景拼接 图像拼接基本流程 1.基础流程 2.计算图像间的变换结构 图像拼接相关原理 1.2D图像变换原理 2.特征点错误匹配干扰 3.APAP算法 4.RANSAC方法图像拼接 算法 ...

  6. 基于SIFT特征的图像拼接融合(matlab+vlfeat实现)

    基于SIFT特征的图像拼接融合(matlab+vlfeat实现) piccolo,之前做的东西,简单整理下,不是做图像方向的,写的不好轻喷 主要原理参看SIFT算法详解和SIFT特征匹配算法介绍--寻 ...

  7. C++ OpenCV 图像拼接融合

    目录 一:需求分析 二:步骤详解 三:完整源码分享 四:多张图像拼接  Stitcher算法 一:需求分析 将下面两张图像进行拼接 拼接得到一张完整的图像 二:步骤详解 1.选择特征点 //1.选择特 ...

  8. Python学习教程(Python学习视频_Python学些路线):Day05 总结和练习

    Python学习教程(Python学习视频_Python学些路线):总结和练习 练习清单 寻找"水仙花数". 寻找"完美数". "百钱百鸡" ...

  9. 视频教程-快速入门Python基础教程_Python基础知识大全-Python

    快速入门Python基础教程_Python基础知识大全 十余年计算机技术领域从业经验,在中国电信.盛大游戏等多家五百强企业任职技术开发指导顾问,国内IT技术发展奠基人之一. 杨千锋 ¥99.00 立即 ...

最新文章

  1. 制作生成静态页面的新闻系统
  2. gulp编译less简单demo
  3. 程序员面试金典 - 面试题 04.02. 最小高度树(二叉搜索树中序遍历)
  4. 阿里云ACE认证之理解CDN技术
  5. 什么叫基于web的网站_选择离开家乡在外打工,学门什么专业的技术更有前途呢?-WEB资讯专栏-DMOZ中文网站分类目录...
  6. mysql 主从关系切换
  7. python自动化框架学习-pyautogui
  8. SpringSecurity半成品笔记
  9. 【Android游戏开发之四】Android 游戏框架(一个游戏角色在屏幕行走的demo)
  10. PNG转ICO在线转换
  11. 1386 - Cellular Automaton
  12. win10计算机管理员权限删除,win10删除需管理员权限的文件最佳解决方法
  13. php 星期几大写,php日期转大写
  14. RK系列SDK -- Android HFP蓝牙通话音频处理(蓝牙音箱方案)
  15. oracle 查询带引号,oracle查询带有单引号的 -电脑资料
  16. 实验题7.1 实现二分查找的算法
  17. 干货集中营app制作
  18. Halide学习笔记----Halide tutorial源码阅读2
  19. 数据增强系列(2)如何使用Augly库进行数据增强
  20. BZOJ 4811([Ynoi2017]由乃的OJ-树链剖分)

热门文章

  1. 一键照片转换动漫卡通风,一键给黑白照片上色
  2. 五大算法之动态规划套路详解(1)
  3. 超越过去三年冠军,AAMAS2019 桥牌游戏论文揭秘
  4. 第四章 权限提升分析及防御
  5. 零基础学习java第一课(适合无基础的非科班生)
  6. 苹果向在巴西被盗的iPhone客户支付赔偿金
  7. 多摄像机标定和去畸变
  8. uniapp 打包安卓 Android 抖音app 前后端调试篇~03
  9. 开发者证书、授权文件的管理
  10. 如何赢得消费者信任?