利用python语言实现多张图像拼接_小饼干cookie的博客-CSDN博客_python拼接图像

主要参考上述博文,只是对于复现过程遇到的小问题的解决做一些补充。

拼接程序:

from pylab import *
from numpy import *
from PIL import Image# If you have PCV installed, these imports should work
from PCV.geometry import homography, warp
from PCV.localdescriptors import sift"""
This is the panorama example from section 3.3.
"""featname = ['D:/pythonCode/test/data/testimages/' + str(i + 1) + '.sift' for i in range(5)]   //需要根据自己的图像地址和图像数量修改地址和循环次数
imname = ['D:/pythonCode/test/data/testimages/' + str(i + 1) + '.jpg' for i in range(5)]
# extract features and m
# match
l = {}
d = {}
for i in range(5):    //循环次数=图像数量sift.process_image(imname[i], featname[i])l[i], d[i] = sift.read_features_from_file(featname[i])matches = {}
for i in range(4):    //循环次数=图像数量-1matches[i] = sift.match(d[i + 1], d[i])# visualize the matches (Figure 3-11 in the book)
for i in range(4):    //循环次数=图像数量-1im1 = array(Image.open(imname[i]))im2 = array(Image.open(imname[i + 1]))figure()sift.plot_matches(im2, im1, l[i + 1], l[i], matches[i], show_below=True)# function to convert the matches to hom. points
# 将匹配转换成齐次坐标点的函数
def convert_points(j):ndx = matches[j].nonzero()[0]fp = homography.make_homog(l[j + 1][ndx, :2].T)ndx2 = [int(matches[j][i]) for i in ndx]tp = homography.make_homog(l[j][ndx2, :2].T)# switch x and y - TODO this should move elsewherefp = vstack([fp[1], fp[0], fp[2]])tp = vstack([tp[1], tp[0], tp[2]])return fp, tp# estimate the homographies
# 估计单应性矩阵
model = homography.RansacModel()fp, tp = convert_points(1)
H_12 = homography.H_from_ransac(fp, tp, model)[0]  # im 1 to 2fp, tp = convert_points(0)
H_01 = homography.H_from_ransac(fp, tp, model)[0]  # im 0 to 1tp, fp = convert_points(2)  # NB: reverse order
H_32 = homography.H_from_ransac(fp, tp, model)[0]  # im 3 to 2tp, fp = convert_points(3)  # NB: reverse order
H_43 = homography.H_from_ransac(fp, tp, model)[0]  # im 4 to 3# 扭曲图像
delta = 100  # 用于填充和平移 for padding and translationim1 = array(Image.open(imname[1]), "uint8")
im2 = array(Image.open(imname[2]), "uint8")
im_12 = warp.panorama(H_12, im1, im2, delta, delta)im1 = array(Image.open(imname[0]), "f")
im_02 = warp.panorama(dot(H_12, H_01), im1, im_12, delta, delta)im1 = array(Image.open(imname[3]), "f")
im_32 = warp.panorama(H_32, im1, im_02, delta, delta)im1 = array(Image.open(imname[4]), "f")
im_42 = warp.panorama(dot(H_32, H_43), im1, im_32, delta, 2 * delta)figure()
imshow(array(im_42, "uint8"))
axis('off')
show()

先了解下拼接的相关理论,将代码复制到Python中复现,对遇到的问题逐一解决

1、需要安装PCV包

参考手把手解决解决Python安装PCV_日拱一卒不慌忙的博客-CSDN博客

2、代码中的读取图像,无.sift文件

imname使我们要拼接的原图

featname是sift文件,这个文件是需要根据原图进行生成的

具体代码参考

# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
from PCV.localdescriptors import sift
from PCV.localdescriptors import harris# 添加中文字体支持
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:/windows/fonts/SimSun.ttc", size=14)imname = 'D:/ComputerVision_code/img/sdl11.jpg'   //需要拼接的图像的位置
im = array(Image.open(imname).convert('L'))
sift.process_image(imname, 'empire.sift')        //生成名称为empire的sift文件
l1, d1 = sift.read_features_from_file('empire.sift')figure()
gray()
subplot(121)
sift.plot_features(im, l1, circle=False)
title(u'SIFT特征',fontproperties=font)# 检测harris角点
harrisim = harris.compute_harris_response(im)subplot(122)
filtered_coords = harris.get_harris_points(harrisim, 6, 0.1)
imshow(im)
plot([p[1] for p in filtered_coords], [p[0] for p in filtered_coords], '*')
axis('off')
title(u'Harris角点',fontproperties=font)show()

报错:empire.sift not found

原因:未修改PCV文件夹下的sift.py中的process_image函数。

解决方案:下载VLFeat0.9.20的版本,将三个相关的文件复制到自己项目环境中,再将Anaconda中sift.py的文件打开地址修改一下就可以了

主要参考:【python】 OSError:sift not found 问题解决_Lin-CT的博客-CSDN博客

博主讲的很详细,我就不画蛇添足了。

3、成功生成了sift文件,可以继续运行图像拼接程序,报错did not meet fit acceptance criteria

原因:图片问题,输入的图片太暗或太糊,导致系统无法进行特征提取或特征点太少无法匹配(有时候图片正常也会出现这种情况,反正出现这个问题只需换图片即可解决)。

主要参考:python计算机视觉常见报错及解决方案(不断更新中)_Lin-CT的博客-CSDN博客

个人感受:采用上述方式进行图像拼接,需要图像特征点较多并明显才能达到好的拼接效果,否则要么特征点太少程序无法运行,要么拼接效果很差。

我的图像的特征点较少,并且位移信息基本已知,我打算通过平移叠加进行拼图,在想是直接用PS拼(真香),还是再找找新的图像处理方法[哭笑不得]

快看我美丽的拼接成果。

再附两个参考博文:

SIFT特征提取+匹配_Deer dolphin的博客-CSDN博客_sift特征提取和匹配

实验四——图像拼接_cyh_first的博客-CSDN博客_图像拼接测试图片

OpenCV图像处理--常用图像拼接方法_C君莫笑的博客-CSDN博客_opencv 图像拼接

感谢在解决问题过程中各位大佬的帮助,如果我的回答帮助到你,请给我点赞加油呀~~

利用Python实现图像拼接相关推荐

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

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

  2. mysql数据导入python_利用python将mysql中的数据导入excel

    原博文 2017-06-29 13:29 − Python对Excel的读写主要有xlrd.xlwt.xlutils.openpyxl.xlsxwriter几种. 如下分别利用xlwt和openpyx ...

  3. python 物理学中的应用_利用python求解物理学中的双弹簧质能系统详解

    前言 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的模型如下: 在这个系统里有两个物体,它们的质 ...

  4. 怎么用python找论文_如何利用Python绘制学术论文图表方法

    论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷: 1.当数据较多时,容易出现excel"翻白眼"的现象: 2.需要 ...

  5. 在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操

    在前面的博文中,我将300多张电影海报拼接为了一张103MB的巨幅图片,我想拿它做电脑桌面(1080P),但是这么多的图片,存储和加载是个麻烦事儿,需要将它压缩到几MB大小. 在Ubuntu 16.0 ...

  6. 在Linux上利用python获取本机ip

    下面介绍在Linux上利用python获取本机ip的方法. 经过网上调查, 发现大致有两种方法, 一种是调用shell脚本,另一种是利用python中的socket等模块来得到,下面是这两种方法的源码 ...

  7. NLP实战:利用Python理解、分析和生成文本 | 赠书

    导读:本文内容参考自<自然语言处理实战:利用Python理解.分析和生成文本>一书,由Hobson Lane等人所著. 本书是介绍自然语言处理(NLP)和深度学习的实战书.NLP已成为深度 ...

  8. 利用Python基础代码语句,实现2G时代文字小游戏,世界如此简单

    优质文章,第一时间送达! 相信许多80,90后都玩过2G时代的文字小游戏,它是来自QQ家园的专属回忆.偷菜,美味小镇,大乐斗,还有精武堂等等,虽然只是文字的输出,但是留给我们这一代的人的印象却是最深刻 ...

  9. 利用python爬虫与数据分析,打造最强玩法,轻松成为大神级玩家!

    前言: 最近迷上了一款游戏,但是作为一名程序员的我是不可能只玩游戏的,我必须把它的官网数据采集下来! 环境: windows python3.6.5 模块: requests jsonpath pyg ...

最新文章

  1. 转行学python后悔了-你是多少岁转行的?转行后你后悔了吗?
  2. 将有序数组转为二叉搜索树
  3. MDK linker和debug的设置以及在RAM中调试
  4. 【渝粤题库】陕西师范大学180208 产品管理 作业(专升本)
  5. oracle应收模块核销点不上,详解EBS接口开发之应收款处理
  6. django 1.8 官方文档翻译: 2-2-3 查找 API 参考
  7. 48 - LeetCode 122 121. 买卖股票的最佳时机
  8. 【shell系列】之正则表达式
  9. mod libs 课堂
  10. 《C#图解教程》 总览
  11. matlab help函数用法,MATLAB函数用法
  12. 公网访问局域网家用nas
  13. 360安全卫士推出“极速版”:永久免费、无弹窗广告!
  14. 怎样区分病毒性感冒和细菌性感冒?
  15. 巴比特独家丨从0.06%飙涨到30%,BAT在Compound的利率飙涨背后实际危机四伏
  16. laravel5.6 使用mail发送附件邮件
  17. MJKDZ PS2手柄控制OskarBot小车(一):Arduino串口发送数据
  18. 使用DpInst安装驱动程序
  19. 苹果应用分身_苹果手机微信分身怎么下载?微信多开版地址
  20. Java基础语法 (Random随机数)

热门文章

  1. 解方程之直接开平方法
  2. php 仓储系统,一库仓储,PHP开源进销存系统 v2.8
  3. 如何解决微信测试公众号配置失败的问题
  4. ps 如何将视频转换成gif?
  5. java继承关系中,父类private修饰的内容真的不能被继承吗?NO
  6. 普通大学生互联网逆袭风雨路
  7. MP3、PCM、WAV等音频基础格式编码总结与代码分析
  8. html embed css,HTML+CSS入门 embed详解
  9. ES的Query的DSL语法Filter DSL聚合分析
  10. 泰克示波器MSO56B混合信号示波器技术参数