Python+opencv 图像拼接
1.http://www.cnblogs.com/skyfsm/p/7411961.html ,给出了很好地拼接算法实现
2.由于不是Python的,所以简单做了一些翻译转成Python+opencv的实现
3.修改了原来的特征点检测算法为ORB(由于sift和surf的专利问题)
4.结果
5.源码
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
import matplotlib.gridspec as gridspecGOOD_POINTS_LIMITED = 0.99
src = 'photoes\\homograph\\w1.jpg'
des = 'photoes\\homograph\\w2.jpg'img1_3 = cv.imread(src,1)# 基准图像
img2_3 = cv.imread(des,1)# 拼接图像orb = cv.ORB_create()
kp1, des1 = orb.detectAndCompute(img1_3,None)
kp2, des2 = orb.detectAndCompute(img2_3,None)bf = cv.BFMatcher.create()matches = bf.match(des1,des2)matches = sorted(matches, key = lambda x:x.distance)goodPoints =[]
for i in range(len(matches)-1):
if matches[i].distance < GOOD_POINTS_LIMITED * matches[i+1].distance:
goodPoints.append(matches[i])# goodPoints = matches[:20] if len(matches) > 20 else matches[:]
print(goodPoints)img3 = cv.drawMatches(img1_3,kp1,img2_3,kp2,goodPoints, flags=2,outImg=None )src_pts = np.float32([kp1[m.queryIdx].pt for m in goodPoints]).reshape(-1, 1, 2)
dst_pts = np.float32([kp2[m.trainIdx].pt for m in goodPoints]).reshape(-1, 1, 2)M, mask = cv.findHomography( dst_pts,src_pts, cv.RHO)# 获取原图像的高和宽
h1,w1,p1 = img2_3.shape
h2,w2,p2 = img1_3.shapeh = np.maximum(h1,h2)
w = np.maximum(w1,w2)_movedis = int(np.maximum(dst_pts[0][0][0],src_pts[0][0][0]))
imageTransform = cv.warpPerspective(img2_3,M,(w1+w2-_movedis,h))M1 = np.float32([[1, 0, 0], [0, 1, 0]])
h_1,w_1,p = img1_3.shape
dst1 = cv.warpAffine(img1_3,M1,(w1+w2-_movedis, h))dst = cv.add(dst1,imageTransform)
dst_no = np.copy(dst)dst_target = np.maximum(dst1,imageTransform)fig = plt.figure (tight_layout=True, figsize=(8, 18))
gs = gridspec.GridSpec (6, 2)
ax = fig.add_subplot (gs[0, 0])
ax.imshow(img1_3)
ax = fig.add_subplot (gs[0, 1])
ax.imshow(img2_3)
ax = fig.add_subplot (gs[1, :])
ax.imshow(img3)
ax = fig.add_subplot (gs[2, :])
ax.imshow(imageTransform)
ax = fig.add_subplot (gs[3, :])
ax.imshow(dst1)
ax = fig.add_subplot (gs[4, :])
ax.imshow(dst_no)
ax = fig.add_subplot (gs[5, :])
ax.imshow(dst_target)
ax.set_xlabel ('The smooth method is SO FAST !!!!')
plt.show()
转载于:https://www.cnblogs.com/aaron-clark-aic/p/9994677.html
Python+opencv 图像拼接相关推荐
- python+opencv图像拼接-python opencv 图像拼接的实现方法
初级的图像拼接为将两幅图像简单的粘贴在一起,仅仅是图像几何空间的转移与合成,与图像内容无关.高级图像拼接也叫作基于特征匹配的图像拼接,拼接时消去两幅图像相同的部分,实现拼接合成全景图. 具有相同尺寸的 ...
- python opencv图像拼接
OpenCV 是一个开源的计算机视觉库,可以用来进行图像处理和计算机视觉方面的开发.它提供了一系列的函数和类来实现图像拼接. 在 Python 中使用 OpenCV 进行图像拼接时,需要用到 cv2 ...
- python opencv图像拼接 多张图相互有重复部分
import cv2 import math import os# 文件夹所有图片 path = "Images/ROIRun" images = [] for filename ...
- python图像拼接_python opencv 图像拼接的实现方法
初级的图像拼接为将两幅图像简单的粘贴在一起,仅仅是图像几何空间的转移与合成,与图像内容无关.高级图像拼接也叫作基于特征匹配的图像拼接,拼接时消去两幅图像相同的部分,实现拼接合成全景图. 具有相同尺寸的 ...
- python+opencv实现多张图像拼接_附源码
文章目录 前言 完整源码 下载链接:[https://download.csdn.net/download/DeepLearning_/87290571](https://download.csdn. ...
- python全景图像拼接_Python+OpenCV实现图像的全景拼接
本文实例为大家分享了Python+OpenCV实现图像的全景拼接的具体代码,供大家参考,具体内容如下 环境:python3.5.2 + openCV3.4 1.算法目的 将两张相同场景的场景图片进行全 ...
- 重磅升级,52个Python+OpenCV实战项目教你掌握图像处理
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 近期小白学视觉公众号推出了多篇Python+OpenCV实战项目的 ...
- python——opencv入门(一)
1. OpenCV的结构 和Python一样,当前的OpenCV也有两个大版本,OpenCV2和OpenCV3.相比OpenCV2,OpenCV3提供了更强的功能和更多方便的特性.不过考虑到和深度学习 ...
- Python + OpenCV + DeepLearning 解数独问题【一、数独的提取】
整个解数独问题可以大致分为3个部分: 从图片中提取出完整的数独[本文的部分] 从数独中提取出数字并传入神经网络进行预测 解出数独 [环境] Python:3.8.5 OpenCV:4.5.1 Kera ...
最新文章
- 设计模式学习1:设计模式简述和设计模式原则
- adviser vs mentor
- [转载] 中华典故故事(孙刚)——21 正月剪头死舅舅
- linux上安装spark_hadoop_java_scala
- OpenCV油画效果
- Java中的数组数据结构需要了解的要点
- 如何画正太分布曲线_python scipy.stats实现各种常见的统计分布
- 【工作手札】日常工作笔记
- 优酷路由宝文件服务器,优酷路由宝L1刷breed加刷高恪路由,最新可用包含工具及所有文件2019年10月13...
- Python+Cartopy绘制中国地图
- 数据结构-线性链表的实现和应用
- python爬取qq空间相册图片_如何用 Python 爬取 QQ 空间说说和相册?
- 微信小程序常用样式汇总
- 你真的理解this吗
- Word-去掉标题前面的小黑点
- fzyzojP3580 -- [校内训练-互测20180315]小基的高智商测试
- 徐姗姗 20190912-2 命令行
- MetaLife Web3开放元宇宙vs内卷致命的Web2元宇宙
- tagul添加中文字体——最简单的方法
- Windows截图快捷键及自动保存路径
热门文章
- 量子位MEET大会报名开启!各领域头部玩家集结,AI年度榜单揭晓,在这里预见智能科技新未来...
- 哈佛新研究登上Science封面:这个机械外骨骼,是一条“轻功”短裤
- 谁在“唱衰”OpenStack?
- xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务
- JavaScript内存优化
- Spring boot 嵌入的tomcat不能启动: Unregistering JMX-exposed beans on shutdown
- Android onclicklistener中使用外部类变量时为什么需要final修饰【转】
- Mysql分析性能(存储过程)
- C++中文转码问题(GB2312 - UTF8)
- Eclipse 每行 79 字符限制的提示线