100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 最详细的解释——如何实现多张图片拼接为一张图(一)

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

时间:2020-05-06 21:03:45

相关推荐

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

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

一、不重叠拼接图片

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

import cv2import numpy as npimg1 = 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()

显示结果:

concatenate函数也可以可以实现纵向连接,代码见上,拼接的结果如下:

我们发现使用concatenate函数连接图片,横向和纵向拼接只需要改变axis的参数值即可。

2、使用joint连接两张图片

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

from PIL import Imagedef join(png1, png2, flag='vertical'):img1, img2 = Image.open(png1), Image.open(png2)size1, size2 = img1.size, img2.sizeif 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'

拼接的结果如下:

横向拼接效果:

纵向拼接效果:

3、使用numpy库自带的hstack()和vstack()

代码如下:

import cv2from 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、Python将两张图片按横向或纵向拼接成一张图片

2、python将多幅图片显示在一张图片上

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。