IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 多幅图像全景拼接代码修改 -> 正文阅读

[Python知识库]多幅图像全景拼接代码修改

前言

参考代码:github代码地址

1、创建虚拟环境

conda create -n stitching python=3.7.0

在这里插入图片描述

2、激活虚拟环境

conda activate stitching

3、安装opencv和相应的包

3.1 查看可安装opencv版本

相关opencv的最新版安装可见opencv安装

pip install opencv-python==

在这里插入图片描述

进行安装

pip install opencv-python==3.4.2.16

进行测试
在这里插入图片描述

3.2 安装对应的包

pip install imutils

3.3 安装opencv-contrib-python

出现报错
在这里插入图片描述
解决办法:补上一个版本配套的contrib包

pip install opencv-contrib-python==3.4.2.16

3.4 matplotlib安装

pip install matplotlib

3.5 PCV安装

可以参考PCV安装

  1. 进入对应的文件夹clone PCV的代码
git clone https://github.com/Li-Shu14/PCV.git
  1. 进行安装
    这里由于我是在windows环境安装的
    首先改变盘符到你对应的盘如D:
    进入文件夹cd xxx/PCV
    在这里插入图片描述
python setup.py install

3.5 scipy安装

重新回到参考代码中,运行程序出现了报错

ModuleNotFoundError: No module named 'scipy'

在对应环境进行安装

pip install scipy

4、报错记录

4.1 print报错

SyntaxError: Missing parentheses in call to 'print'. Did you mean print('warp - right')?

在这里插入图片描述
之前的PCV是应用于python2的,现在有针对python3更新的基于python3的PCVgithub

参考PCV安装基于python3进行安装

4.2 matplotlib.delaunay报错

ModuleNotFoundError: No module named 'matplotlib.delaunay'

更改方式可以参考matplotlib.delaunay报错
然后重新进行安装(这里不能直接进到对应的文件,所以修改完需要重新安装,我这里安装出现了报错,我直接删除了虚拟环境重新创建,然后进行安装)

4.3 无法生成.sift文件

在这里插入图片描述

  File "D:\anaconda\envs\stitching\lib\site-packages\numpy\lib\_datasource.py", line 533, in open
    raise IOError("%s not found." % path)
OSError: ./test/1027-1.sift not found.

参考链接:
OSError:sift not found 问题解决
图像拼接参考链接

  1. VLfeat下载
    VLfeat下载
    在这里插入图片描述

  2. 选择对应的文件移入当前工程文件夹
    在这里插入图片描述

  3. 根据你自己的电脑是直接安装的Python还是Anaconda安装的找到对应目录中的【sift.py】文件
    直接安装的路径python\Lib\site-packages\PCV\localdescriptors
    Anaconda安装的路径Anaconda\Lib\site-packages\PCV\localdescriptors

  4. 打开sift.py,修改路径
    打开【sift.py】文件,全局cmmd,将箭头指向的那个引号里的路径改为自己项目中【sift.exe】的路径
    注意:路径中如果用“\”则需要在前端加“r”,用’‘/’'或“\”则不需要
    在这里插入图片描述
    在这里插入图片描述
    成功生成sift文件

cmmd = str(r"D:/LearningData/imageMosaic/panoramic-image/sift.exe "+imagename+" --output="+resultname+ " "+params) 

5、拼接结果

5.1 两张图拼接

  1. 原图
    在这里插入图片描述
    在这里插入图片描述

  2. 获取特征
    在这里插入图片描述

  3. 拼接结果
    在这里插入图片描述

5.2 两张不同角度图拼接

  1. 原图
    在这里插入图片描述
    在这里插入图片描述

  2. 特征
    在这里插入图片描述

  3. 结果
    在这里插入图片描述
    景深有一定差异,但是对于不同角度的图像拼接还是可以进行拼接的

5.3 多图拼接

  1. 原图
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 特征图
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 结果
    在这里插入图片描述

对于多张图的拼接还是有些变形

6、拼接过程梳理

  1. 读取对应路径下的图片文件,提取特征保存在临时文件tmp.pgm中
    在这里插入图片描述

  2. 特征转换为对应的特征矩阵,保存在.sift文件中
    在这里插入图片描述

  3. 分别匹配临近两幅图的特征,可视化特征匹配

  4. 通过封装的PCV方法与匹配到的特征求对应的变化矩阵、从而进行变换、扭曲、融合

  5. 可视化拼接结果
    在这里插入图片描述

附录

1、PCV更改地址

基于4、5两个问题都是python版本导致的问题,修改后的代码我上传到了github
自己改的PCV代码

2、两幅图像拼接代码

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.
"""

# set paths to data folder
# imname使我们要拼接的原图
# featname是sift文件,这个文件是需要根据原图进行生成的
# 需要根据自己的图像地址和图像数量修改地址和循环次数
# featname = ['./images5/'+str(i+1)+'.sift' for i in range(2)] 
# imname = ['./images5/'+str(i+1)+'.jpg' for i in range(2)]
featname = ['./test/1027-'+str(i+1)+'.sift' for i in range(2)] 
imname = ['./test/1027-'+str(i+1)+'.jpg' for i in range(2)]

# extract features and match
l = {}
d = {}
for i in range(2): 
    sift.process_image(imname[i],featname[i])
    l[i],d[i] = sift.read_features_from_file(featname[i])

matches = {}
for i in range(1):
    matches[i] = sift.match(d[i+1],d[i])

# visualize the matches (Figure 3-11 in the book)
for i in range(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() 
# 此代码段为2图图像拼接,若需要多幅图,只需将其中的注释部分取消即可,图像顺序为自右向左。
fp,tp = convert_points(0)
H_01 = homography.H_from_ransac(fp,tp,model)[0] #im 0 to 1

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

#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    


# warp the images
delta = 2000 # for padding and translation

im1 = array(Image.open(imname[0]), "uint8")
im2 = array(Image.open(imname[1]), "uint8")
im_12 = warp.panorama(H_01,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_12, "uint8"))
axis('off')
savefig("example1.png",dpi=300)
show()


  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:24:34  更:2022-09-21 00:26:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 13:58:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计