如何使用python和opencv连接不同形状的图像?

aja*_*esh 2 python opencv numpy matplotlib opencv3.0

我有一些图像(比如 5 个),每个图像都有不同的形状。我想为我的项目报告连接成一张图像。你能提供一种使用opencv和python的简单方法吗?

生成的图像类似于下图。

在 numpy 中,我尝试了类似的方法,它有效但仅适用于两个图像。

r = np.concatenate((images[1][:, :, 1], images[1][:, :, 3]), axis=1)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

en_*_*hai 5

获得您在屏幕截图中显示的结果可能需要更多的修改,但只需将图像堆叠在彼此的顶部就可以像这样完成:

import cv2
import numpy as np

image_names = ['original_field_1_0.PNG','original_field_1_1.PNG','original_field_1_3.PNG','original_field_1_4.PNG','original_field_1_5.PNG']
images = []
max_width = 0 # find the max width of all the images
total_height = 0 # the total height of the images (vertical stacking)

for name in image_names:
    # open all images and find their sizes
    images.append(cv2.imread(name))
    if images[-1].shape[1] > max_width:
        max_width = images[-1].shape[1]
    total_height += images[-1].shape[0]

# create a new array with a size large enough to contain all the images
final_image = np.zeros((total_height,max_width,3),dtype=np.uint8)

current_y = 0 # keep track of where your current image was last placed in the y coordinate
for image in images:
    # add an image to the final array and increment the y coordinate
    final_image[current_y:image.shape[0]+current_y,:image.shape[1],:] = image
    current_y += image.shape[0]

cv2.imwrite('fin.PNG',final_image)
Run Code Online (Sandbox Code Playgroud)

基本思想是首先找到图像的总大小,然后创建一个该大小的数组,最后将这些范围内的像素设置为每个单独图像的像素,同时向下迭代(或横向迭代,取决于你想要什么)。

您还可以在要开始另一行或另一列时实施阈值。