• 售前

  • 售后

热门帖子
入门百科

pytho多张图片的无损拼接的实现示例

[复制链接]
我放心你带套猛 显示全部楼层 发表于 2021-8-14 13:17:20 |阅读模式 打印 上一主题 下一主题
目次


  • 导入 python 库
  • 查看需要拼接的图片
  • 横向拼接
  • 生存拼接后的图片
  • 总结

    • 纵向拼接
    • 图片间距


导入 python 库
  1. import matplotlib.pyplot as plt
  2. import skimage.io as io
  3. import numpy as np
复制代码
查看需要拼接的图片

因为工作需要,以是就不利用昨天晚上的图片了。
我就拿了两张截图作为示例演示。
首先看看拼接前的图片是什么样子:
  1. jzg = io.imread('jzg.jpg')   # np.ndarray, [h, w, c], 值域[0, 255], RGB
  2. plt.imshow(jzg)   #查看图片
  3. plt.show()
复制代码
表明分析:“jzg”生存的是numpy的数组。
  1. lgz = io.imread('lgz.jpg')   # np.ndarray, [h, w, c], 值域[0, 255], RGB
  2. plt.imshow(lgz)
  3. plt.show()
复制代码


因为我利用的是 jupyter Notebook,以是图片显示的不是太清晰。

查看一下图片的巨细和数组元素的数据范例。
  1. print(jzg.shape)   #查看图片的大小
  2. print(jzg.dtype)   #查看数组元素数据类型
  3. print(lgz.shape)
  4. print(lgz.dtype)
复制代码
输出:
  1. (720, 1280, 3)
  2. uint8
  3. (720, 1280, 3)
  4. uint8
复制代码
(720, 1280, 3)表示的是数组的巨细,物理意义为[h, w, c],分别是图片的高度h,图片的宽度w,图片的通道数c。
可以看出两者的巨细完全一致,数组元素的数据范例为“uint8”。
查看数组中元素的值域:
  1. print([jzg.min(), jzg.max()])
复制代码
输出:
  1. [0, 255]
复制代码
横向拼接

创建拼接用的数组:
  1. pj1 = np.zeros((720,1280 + 1280,3))   #横着拼接
  2. pj1[:,:1280,:] = jzg.copy()   #图片jzg在左
  3. pj1[:,1280:,:] = lgz.copy()   #图片lgz在右
  4. print(pj1.dtype)   #查看数组元素类型
复制代码
输出:
  1. float64
复制代码
可以看出拼接后的数据范例不一样了,以是要改一下,不然显示的就是错误的。
  1. pj1=np.array(pj1,dtype=np.uint8)   #将pj1数组元素数据类型的改为"uint8"
  2. plt.imshow(pj1)   #查看拼接情况
  3. plt.show()
复制代码


生存拼接后的图片

将拼接后的图片生存在当前目次下,也可以改为别的的路径。
  1. io.imsave('pj1.jpg', pj1)   #保存拼接后的图片
复制代码
总结

横向拼接的代码总结如下:
  1. import matplotlib.pyplot as plt
  2. import skimage.io as io
  3. import numpy as npjzg = io.imread('jzg.jpg')   # np.ndarray, [h, w, c], 值域(0, 255), RGBplt.imshow(jzg)   #查看图片plt.show()lgz = io.imread('lgz.jpg')   # np.ndarray, [h, w, c], 值域(0, 255), RGBplt.imshow(lgz)plt.show()print(jzg.shape)   #查看图片的大小
  4. print(jzg.dtype)   #查看数组元素数据类型
  5. print(lgz.shape)
  6. print(lgz.dtype)pj1 = np.zeros((720,1280 + 1280,3))   #横向拼接pj1[:,:1280,:] = jzg.copy()   #图片jzg在左pj1[:,1280:,:] = lgz.copy()   #图片lgz在右print(pj1.dtype)   #查看数组元素范例pj1=np.array(pj1,dtype=np.uint8)   #将pj1数组元素数据类型的改为"uint8"
  7. plt.imshow(pj1)   #查看拼接情况
  8. plt.show()io.imsave('pj1.jpg', pj1)   #保存拼接后的图片
复制代码
纵向拼接

当然,可以横向拼接自然也可以纵向拼接,只需将拼接用的数组改为如下:
  1. pj2 = np.zeros((720 + 720,1280,3))   #横向拼接
复制代码
将拼接利用改为:
  1. pj1[:720,:,:] = jzg.copy()   #图片jzg在上
  2. pj1[720:,:,:] = lgz.copy()   #图片lgz在下
复制代码
然后其他步骤都一样。

图片间距

有些时间要求要有缝拼接,这时间就将拼接用的数组横向或纵向变大,空白地域利用“0”大概“255”填充(我不知道“0”和“255”中,哪个代表白色,哪个代表玄色,需要的就自己去实行大概查询一下)。
到此这篇关于pytho多张图片的无损拼接的实现示例的文章就介绍到这了,更多干系pytho图片无损拼接内容请搜索草根技术分享从前的文章或继续浏览下面的干系文章盼望各人以后多多支持草根技术分享!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作