利用Python实现图像拼接

这篇具有很好参考价值的文章主要介绍了利用Python实现图像拼接。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

利用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):    //循环次数=图像数量-1
    matches[i] = sift.match(d[i + 1], d[i])

# visualize the matches (Figure 3-11 in the book)
for i in range(4):    //循环次数=图像数量-1
    im1 = 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 elsewhere
    fp = 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 2

fp, tp = convert_points(0)
H_01 = homography.H_from_ransac(fp, tp, model)[0]  # im 0 to 1

tp, fp = convert_points(2)  # NB: reverse order
H_32 = homography.H_from_ransac(fp, tp, model)[0]  # im 3 to 2

tp, 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 translation

im1 = 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拼(真香),还是再找找新的图像处理方法[哭笑不得]

快看我美丽的拼接成果。

利用Python实现图像拼接

再附两个参考博文:

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

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

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

感谢在解决问题过程中各位大佬的帮助,如果我的回答帮助到你,请给我点赞加油呀~~文章来源地址https://www.toymoban.com/news/detail-497117.html

到了这里,关于利用Python实现图像拼接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python opencv图像拼接

    OpenCV 是一个开源的计算机视觉库,可以用来进行图像处理和计算机视觉方面的开发。它提供了一系列的函数和类来实现图像拼接。 在 Python 中使用 OpenCV 进行图像拼接时,需要用到 cv2 库。首先,需要将需要拼接的图片读入,然后使用 cv2.createStitcher() 函数来创建一个图像拼接

    2024年02月16日
    浏览(55)
  • 图像拼接——python

    结合SIFT、单应性变换、RANSAC和SVD分解等算法实现指定几幅图像之间的拼接 1. SIFT特征点检测,得到特征点以及特征向量 如果要实现图像之间的特征点匹配,要通过特征描述子集之间比对完成。常见的匹配器有 暴力匹配器 和 快速近似最邻近算法匹配器 。暴力匹配器就是将两

    2023年04月08日
    浏览(31)
  • Python与OpenCV环境中,借助SIFT、单应性、KNN以及Ransac技术进行实现的图像拼接算法详细解析及应用

    一、引言 在当今数字化时代,图像处理技术的重要性不言而喻。它在无人驾驶、计算机视觉、人脸识别等领域发挥着关键作用。作为图像处理的一个重要部分,图像拼接算法是实现广阔视野图像的重要手段。今天我们将会讲解在Python和OpenCV环境下,如何使用SIFT、单应性、K

    2024年02月15日
    浏览(41)
  • Python-图像拼接神器-stitching

    采用这个包,图像拼接结果很好~ 代码只需要三四行 图片1 图片2 图片3 图像拼接的效果图: 比如:你想将这三张图片拼接在一起,但是在这里面有混入了一张无关的照片,他还是会拼接的很好; 什么意思呢 具体来说: 我把这四张图片放在一起进行拼接 图片1 图片2 图片3 图

    2024年02月10日
    浏览(40)
  • Python计算机视觉(三)—图像拼接

        图像拼接是计算机视觉中的重要分支,它是将两幅以上的具有部分重叠的图像进行拼接从而得到较高分辨率或宽视角的图像。本文将结合python+opencv实现两幅图像的拼接。     图像拼接一般步骤: 1.根据给定图像/集,实现特征匹配 2.通过匹配特征计算图像之间的变换结构

    2024年02月15日
    浏览(43)
  • python opencv orb特征点提取匹配然后图像拼接

    opencv 基于ORB特征点图像拼接_特征点 warpperspective-CSDN博客 图像用这儿的 右边多出了一部分黑色的,应该是重复部分的宽

    2024年01月19日
    浏览(49)
  • 计算机毕设 python opencv 机器视觉图像拼接算法

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月07日
    浏览(59)
  • 利用弱监督学习实现从单张图像到图像集的准确3D人脸重建:PyTorch和Python的深度实践

    在这篇文章中,我将带你走进3D人脸重建的世界,并介绍如何使用弱监督学习从单张图像或图像集中准确重建3D人脸。我们将使用Python和PyTorch,一种广泛用于深度学习的开源框架,来实现这一目标。 3D人脸重建是计算机视觉领域的一项重要任务,它旨在从2D图像中恢复出3D脸部

    2024年02月16日
    浏览(46)
  • Python常用视频编辑操作——读取与保存视频、更改帧数、拼接视频、视频语音合并、视频与图像互转等

    降低视频帧数,简单的操作只能降低视频帧数,如果要增加视频帧数,那就要使用深度学习进行插帧处理: 水平合并的效果:

    2024年02月02日
    浏览(41)
  • 【计算机视觉—python 】 图像处理入门教程 —— 图像属性、像素编辑、创建与复制、裁剪与拼接【 openCV 学习笔记 005 to 010 and 255】

    OpenCV中读取图像文件后的数据结构符合Numpy的ndarray多维数组结构,因此 ndarray 数组的属性和操作方法可用于图像处理的一些操作。数据结构如下图所示: img.ndim:查看代表图像的维度。彩色图像的维数为3,灰度图像的维度为2。 img.shape:查看图像的形状,代表矩阵的行数(高

    2024年01月19日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包