当前位置:   article > 正文

【计算机视觉】OpenCV 4高级编程与项目实战(Python版)【7】:拼接图像_opencv 拼接 python代码

opencv 拼接 python代码

我们已经知道,图像是通过数组描述的,那么拼接图像其实就是拼接数组。NumPy提供了2个拼接数组的函数,分别是hstack函数和vstack函数,这两个拼接函数可以将两个数组水平和垂直拼接在一起,也就相当于将两幅图像水平和垂直拼接在一起,本节将详细讲解如何使用这两个函数水平拼接图像和垂直拼接图像。

  1. 水平拼接

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)。

  1. import numpy as np
  2. a = np.array([1,2,3])
  3. b = np.array([4,5,6])
  4. c = np.array([7,8,9])
  5. result = np.hstack((a,b,c)) # 水平拼接a数组、b数组和c数组
  6. print(result) # 输出拼接结果(1×9的数组)
  7. x = np.array([[1,2],[3, 4]])
  8. y = np.array([['a','b','c'],['d', 'e', 'f']])
  9. result = np.hstack((x, y)) # 水平拼接x数组和y数组
  10. print(result) # 输出拼接结果(2×5的数组)

运行程序,会输出如下的结果:

  1. [1 2 3 4 5 6 7 8 9]
  2. [['1' '2' 'a' 'b' 'c']
  3. ['3' '4' 'd' 'e' 'f']]

2. 垂直拼接

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)。

  1. import numpy as np
  2. a = np.array([1,2,3])
  3. b = np.array([4,5,6])
  4. c = np.array([7,8,9])
  5. result = np.vstack((a,b,c)) # 垂直拼接3个1×3的数组(a、b、c)
  6. print(result) # 输出垂直拼接的结果
  7. x = np.array([[1,2],[3, 4]])
  8. y = np.array([['a','b'],['c', 'd'],['e', 'f']])
  9. result = np.vstack((x, y)) # 垂直拼接1个2×2的数组和1个3×2的数组
  10. print(result) # 输出垂直拼接的结果

运行程序,会输出如下的结果。

  1. [[1 2 3]
  2. [4 5 6]
  3. [7 8 9]]
  4. [['1' '2']
  5. ['3' '4']
  6. ['a' 'b']
  7. ['c' 'd']
  8. ['e' 'f']]

3. 将图像变成2 × 2网格

编写一个程序,通过水平拼接和垂直拼接,将图像变成2 × 2的网格效果,也就是横向2个同样的图像,纵向也有2个同样的图像。代码如下:

  1. import cv2
  2. import numpy as np
  3. img = cv2.imread("alien.jpg")
  4. img_h = np.hstack((img, img)) # 水平拼接2个图像
  5. img_v = np.vstack((img_h, img_h)) # 将水平拼接的结果再垂直拼接
  6. cv2.imshow("new_img", img_v) # 显示拼接效果
  7. cv2.waitKey()
  8. cv2.destroyAllWindows()

运行程序,会看到如图3所示的拼接效果。

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

闽ICP备14008679号