当前位置:   article > 正文

最详细的解释——如何实现多张图片拼接为一张图(一)_cv2图像拼接

cv2图像拼接

日常生活中,我们经常需要将多张图片合成为一张图片,但是却又找不到好的方法,直接将多张图片拖拽到一起不仅耗时耗力,而且效率低,效果差。OpenCV 给我们提供了很好的拼接工具,下面我们以两张图片的拼接为例介绍常见的拼接算法。

一、不重叠拼接图片

1、使用concatenate横向连接图片,代码如下:

import cv2
import numpy as np

img1 = cv2.imread('E:/picture/room/room1.jpg')
img2 = cv2.imread('E:/picture/room/room2.jpg')

# 横向连接
image = np.concatenate((img1, img2), axis=1)

# 纵向连接
# image = np.concatenate((img1, img2), axis=0)
cv2.imshow('image', image)
cv2.waitKey()
cv2.destroyAllWindows()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

显示结果:

在这里插入图片描述
concatenate函数也可以可以实现纵向连接,代码见上,拼接的结果如下:
在这里插入图片描述我们发现使用concatenate函数连接图片,横向和纵向拼接只需要改变axis的参数值即可。

2、使用joint连接两张图片
该方法主要是使用PIL库中的Image类,然后使用paste方法来拼接图片获得完成图。代码如下:

from PIL import Image

def join(png1, png2, flag='vertical'):
    img1, img2 = Image.open(png1), Image.open(png2)
    size1, size2 = img1.size, img2.size
    if flag == 'horizontal':
        joint = Image.new('RGB', (size1[0]+size2[0], size1[1]))
        loc1, loc2 = (0, 0), (size1[0], 0)
        joint.paste(img1, loc1)
        joint.paste(img2, loc2)
        joint.save('horizontal.png')
    elif flag == 'vertical':
        joint = Image.new('RGB', (size1[0], size1[1]+size2[1]))
        loc1, loc2 = (0, 0), (0, size1[1])
        joint.paste(img1, loc1)
        joint.paste(img2, loc2)
        joint.save('vertical.png')


if __name__ == '__main__':
    img1 = 'D:/Programprojects/PycharmProjects/Image-Stitching-with-OpenCV-and-Python/image_rotate/img1.jpg'
    img2 = 'D:/Programprojects/PycharmProjects/Image-Stitching-with-OpenCV-and-Python/image_rotate/img2.jpg'
    join(img1, img2, flag='horizontal')
    join(img1, img2, flag='vertical'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

拼接的结果如下:
横向拼接效果:
在这里插入图片描述
纵向拼接效果:
在这里插入图片描述

3、使用numpy库自带的hstack()和vstack()
代码如下:

import cv2
from pylab import *

img1 = cv2.imread('E:/picture/room/room1.jpg')
img2 = cv2.imread('E:/picture/room/room2.jpg')

# 横向拼接
htitch = np.hstack((img1, img2))
# 纵向拼接
# vtitch = np.vstack((img1, img2))
cv2.imwrite('./img.jpg', htitch)
# cv2.imwrite('./img.jpg', vtitch)
cv2.imshow("test1", htitch)
# cv2.imshow("test2", vtitch)

cv2.waitKey(0)
cv2.destroyAllWindows()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

实验结果如下:
在这里插入图片描述在这里插入图片描述
希望对大家有所帮助。

参考:
1、Python将两张图片按横向或纵向拼接成一张图片
2、python将多幅图片显示在一张图片上

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/81257
推荐阅读
相关标签
  

闽ICP备14008679号