opencv中使用一个窗口显示多张图像,可以采用拼接的方式:将要显示的图像们拼接到一张大图上,在python中可以很方便实现。
python代码如下:
注意输入的imglist中图像尺寸要一致,通道数可以不一致,都会转换成BGR格式
import cv2
import numpy as np
import os
from copy import copy
def cv2showimgs(scale, imglist, order):
"""
:param scale: float 原图缩放的尺度
:param imglist: list 待显示的图像序列
:param order: list or tuble 显示顺序 行×列
:return: 返回拼接好的numpy数组
"""
allimgs = imglist.copy()
for i, img in enumerate(allimgs):
if np.ndim(img) == 2:
allimgs[i] = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
allimgs[i] = cv2.resize(img, dsize=(0, 0), fx=scale, fy=scale)
w, h = allimgs[0].shape[1], allimgs[0].shape[0]
# 将待显示图片拼接起来
if order[0] * order[1] == len(imglist):
imgblank = np.zeros((h * order[0], w * order[1], 3), np.uint8)
for i in range(order[0]):
for j in range(order[1]):
imgblank[i * h:(i + 1) * h, j * w:(j + 1) * w, :] = allimgs[i * order[1] + j]
return imgblank
else:
print('Error: wrong order!')
return None
函数测试
root = "**图片根目录**"
os.chdir(root)
imgfiles = os.listdir(root)
imgs = []
for i in range(4):
img = cv2.imread(imgfiles[i], 1)
imgs.append(img)
show = cv2showimgs(scale=0.6, imglist=imgs, order=(2,2))
# cv2.namedWindow('1', flags=cv2.WINDOW_NORMAL)
cv2.imshow('1', show)
cv2.waitKey(0)
2×2、1×4显示的结果图如下:



