赞
踩
我们已经知道,图像是通过数组描述的,那么拼接图像其实就是拼接数组。NumPy提供了2个拼接数组的函数,分别是hstack函数和vstack函数,这两个拼接函数可以将两个数组水平和垂直拼接在一起,也就相当于将两幅图像水平和垂直拼接在一起,本节将详细讲解如何使用这两个函数水平拼接图像和垂直拼接图像。
hstack函数可以对数组进行水平拼接,hstack函数的原型如下:
hstack(tup) -> array
参数说明:
tup:要拼接的数组元组。
array:返回值,拼接后生成的新数组。
hstack函数可以拼接多个数组,但每一个参与拼接的数组必须行数相同,例如,2 × 2的数组只能与2行的数组进行拼接,2 × 3、2 × 4的数组都可以与2 × 2的数组进行拼接,但3 × 3的数组不能与2 × 2的数组进行拼接,因为前者是3行,后者是2行。
如果将2个或多个数组进行水平拼接,这些数组会横向首尾相接,如图1所示。
下面的代码分别水平拼接了3个一维数组(a、b、c)和2个二维数组(x和y)。
- import numpy as np
- a = np.array([1,2,3])
- b = np.array([4,5,6])
- c = np.array([7,8,9])
- result = np.hstack((a,b,c)) # 水平拼接a数组、b数组和c数组
- print(result) # 输出拼接结果(1×9的数组)
- x = np.array([[1,2],[3, 4]])
- y = np.array([['a','b','c'],['d', 'e', 'f']])
- result = np.hstack((x, y)) # 水平拼接x数组和y数组
- print(result) # 输出拼接结果(2×5的数组)
运行程序,会输出如下的结果:
- [1 2 3 4 5 6 7 8 9]
- [['1' '2' 'a' 'b' 'c']
- ['3' '4' 'd' 'e' 'f']]
vstack函数可以对数组进行垂直拼接,vstack函数的原型如下:
vstack(tup) -> array
参数说明:
tup:要拼接的数组元组。
array:返回值,拼接后生成的新数组。
vstack函数可以拼接多个数组,但每一个参与拼接的数组必须列数相同,例如,2 × 2的数组只能与2列的数组进行拼接,3 × 2、4 × 2的数组都可以与2 × 2的数组进行拼接,但3 × 3的数组不能与2 × 2的数组进行拼接,因为前者是3列,后者是2列。
如果将2个或多个数组进行垂直拼接,这些数组会纵向首尾相接,如图2所示。
下面的代码分别垂直拼接了3个一维数组(a、b、c)和2个二维数组(x和y)。
- import numpy as np
- a = np.array([1,2,3])
- b = np.array([4,5,6])
- c = np.array([7,8,9])
- result = np.vstack((a,b,c)) # 垂直拼接3个1×3的数组(a、b、c)
- print(result) # 输出垂直拼接的结果
- x = np.array([[1,2],[3, 4]])
- y = np.array([['a','b'],['c', 'd'],['e', 'f']])
- result = np.vstack((x, y)) # 垂直拼接1个2×2的数组和1个3×2的数组
- print(result) # 输出垂直拼接的结果
运行程序,会输出如下的结果。
- [[1 2 3]
- [4 5 6]
- [7 8 9]]
- [['1' '2']
- ['3' '4']
- ['a' 'b']
- ['c' 'd']
- ['e' 'f']]
编写一个程序,通过水平拼接和垂直拼接,将图像变成2 × 2的网格效果,也就是横向2个同样的图像,纵向也有2个同样的图像。代码如下:
- import cv2
- import numpy as np
-
- img = cv2.imread("alien.jpg")
- img_h = np.hstack((img, img)) # 水平拼接2个图像
- img_v = np.vstack((img_h, img_h)) # 将水平拼接的结果再垂直拼接
- cv2.imshow("new_img", img_v) # 显示拼接效果
- cv2.waitKey()
- cv2.destroyAllWindows()
运行程序,会看到如图3所示的拼接效果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。