python opencv 同窗口显示多个图像

        为了便于比对图像处理前后的效果,特别是算法处理前后的效果图,我们需要同时显示多张图片。这里采用opencv图像拼接的方法来实现我们想要的效果。

1 定义函数show_multi_img

        定义图片显示函数show_multi_img,共包括5参数,各个参数的意义和类型分别如下:

        (1)scale:float类型,图像缩放比例,即按比例对图像进行缩放。

        (2)imglist:list类型,即待显示的图像数据组成的列表。

        (3)order:list或tuple类型,指图像显示窗口的行和列,order[0]表示行,order[1]表示列。默认取值为1行N列,N为imglist的长度,即待显示图像的张数。

        (4)border:int类型,即图像间最小的间隔大小。

        (5)border:tuple类型,图像间隔区的颜色。

        该函数兼容了不同尺寸图片同时显示。

2 示例代码

# -*- coding: utf-8 -*-
"""
乐乐感知学堂公众号
@author: https://blog.csdn.net/suiyingy
"""

import cv2
import numpy as np

def show_multi_imgs(scale, imglist, order=None, border=10, border_color=(255, 255, 0)):
    """
    :param scale: float 原图缩放的尺度
    :param imglist: list 待显示的图像序列
    :param order: list or tuple 显示顺序 行×列
    :param border: int 图像间隔距离
    :param border_color: tuple 间隔区域颜色
    :return: 返回拼接好的numpy数组
    """
    if order is None:
        order = [1, len(imglist)]
    allimgs = imglist.copy()
    ws , hs = [], []
    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)
        ws.append(allimgs[i].shape[1])
        hs.append(allimgs[i].shape[0])
    w = max(ws)
    h = max(hs)
    # 将待显示图片拼接起来
    sub = int(order[0] * order[1] - len(imglist))
    # 判断输入的显示格式与待显示图像数量的大小关系
    if sub > 0:
        for s in range(sub):
            allimgs.append(np.zeros_like(allimgs[0]))
    elif sub < 0:
        allimgs = allimgs[:sub]
    imgblank = np.zeros(((h+border) * order[0], (w+border) * order[1], 3)) + border_color
    imgblank = imgblank.astype(np.uint8)
    for i in range(order[0]):
        for j in range(order[1]):
            imgblank[(i * h + i*border):((i + 1) * h+i*border), (j * w + j*border):((j + 1) * w + j*border), :] = allimgs[i * order[1] + j]
    return imgblank


if __name__ == '__main__':
    image = cv2.imread('lena.jpg')
    img = show_multi_imgs(0.9, [image, image, image, image, image, image], (2, 3))
    cv2.namedWindow('multi', 0)
    cv2.imshow('multi', img)
    cv2.waitKey(0)

3 测试效果

        测试结果如下图所示:

更多三维、二维感知算法和金融量化分析算法请关注“乐乐感知学堂微信公众号,并将持续进行更新。

猜你喜欢

转载自blog.csdn.net/suiyingy/article/details/125313166