赞
踩
日常生活中,我们经常需要将多张图片合成为一张图片,但是却又找不到好的方法,直接将多张图片拖拽到一起不仅耗时耗力,而且效率低,效果差。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()
显示结果:
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'
拼接的结果如下:
横向拼接效果:
纵向拼接效果:
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()
实验结果如下:
希望对大家有所帮助。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。