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)
获得您在屏幕截图中显示的结果可能需要更多的修改,但只需将图像堆叠在彼此的顶部就可以像这样完成:
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)
基本思想是首先找到图像的总大小,然后创建一个该大小的数组,最后将这些范围内的像素设置为每个单独图像的像素,同时向下迭代(或横向迭代,取决于你想要什么)。
您还可以在要开始另一行或另一列时实施阈值。
归档时间: |
|
查看次数: |
9452 次 |
最近记录: |