Python OpenCV一個窗口中顯示多幅圖像

在使用opencv顯示圖像時,有時候需要顯示多張圖像,就會出現多個窗口,顯得冗餘,用戶不好操作。這時候就想著能不能將這些圖像在一個窗口中顯示。

方法1:創建畫佈,將所有圖像復制到畫佈中,最後顯示畫佈

  # 方法1:創建一個畫佈,將所有圖像復制到畫佈中,最後顯示畫佈
    h, w, _ = img.shape

    img_list = [img, invert, gaussianBlur, flip]  # 圖像列表

    four_view = np.zeros((h * 2 + 10, w * 2 + 10, 3), np.uint8)  # 創建空白圖像
    four_view[:, :] = 255  # 給所有通道的像素值賦值255
    for i in range(len(img_list)):
        row = i // 2
        col = i % 2
        print(row, col)
        # 將小圖像復制到大畫佈上。
        np.copyto(four_view[(h + 10) * row:h * (row + 1) + 10 * row, (w + 10) * col:w * (col + 1) + 10 * col],
                  img_list[i])

    cv.imshow('result', four_view)

方法2:使用numpy模塊中的水平堆疊和豎直堆疊完成所有圖像的堆疊,最後當成一整張圖顯示。

主要用到的兩個函數有:np.hstack()np.vstack()

水平堆疊函數hstack(tup):ndarrays 序列除瞭第二個軸外,數組必須具有相同的形狀,除瞭可以是任意長度的一維數組。豎直堆疊函數np.vstack():ndarrays 序列除瞭第一個軸外,數組必須具有相同的形狀。一維數組必須具有相同的長度。

# 方法2:使用numpy的水平堆疊和豎直堆疊完成所有圖像的堆疊,最後一起顯示
    vs1 = np.hstack((img, invert))  # 水平堆疊
    vs2 = np.hstack((gaussianBlur, flip))  # 水平堆疊
    result = np.vstack((vs1, vs2))  # 豎直堆疊

整個項目的完整代碼:

# -*-coding:utf-8-*-
"""
File Name: color_operation.py
Program IDE: PyCharm
Create File By Author: Hong
"""
import cv2 as cv
import numpy as np


def image_display(image_path: str):
    """
    多個圖像在一個窗口內顯示
    :param image_path: 傳入圖像路徑
    :return:
    """
    img = cv.imread(image_path, cv.IMREAD_COLOR)

    # 顏色取反
    invert = cv.bitwise_not(img)
    # 高斯模糊
    gaussianBlur = cv.GaussianBlur(img, (0, 0), 10)
    # 鏡像
    flip = cv.flip(img, 1)  # 0表示繞x軸翻轉;1表示繞y軸翻轉;-1表示繞兩個軸翻轉

    # 方法1:創建一個畫佈,將所有圖像復制到畫佈中,最後顯示畫佈
    h, w, _ = img.shape

    img_list = [img, invert, gaussianBlur, flip]

    four_view = np.zeros((h * 2 + 10, w * 2 + 10, 3), np.uint8)
    four_view[:, :] = 255  # 給所有通道的像素值賦值255
    for i in range(len(img_list)):
        row = i // 2
        col = i % 2
        print(row, col)
        # 將小圖像復制到大畫佈上。
        np.copyto(four_view[(h + 10) * row:h * (row + 1) + 10 * row, (w + 10) * col:w * (col + 1) + 10 * col],
                  img_list[i])
    cv.imshow('result', four_view)

    # 方法2:使用numpy的水平堆疊和豎直堆疊完成所有圖像的堆疊,最後一起顯示
    vs1 = np.hstack((img, invert))  # 水平堆疊
    vs2 = np.hstack((gaussianBlur, flip))  # 水平堆疊
    result = np.vstack((vs1, vs2))  # 豎直堆疊

    # 初略解決imshow()中文亂碼顯示的問題。不能完全解決,有些中文無法顯示。這是python-opencv的弊端
    def zh_ch(string):
        return string.encode('gbk').decode(errors='ignore')

    cv.imshow(zh_ch('圖片'), result)

    cv.waitKey(0)
    cv.destroyAllWindows()


if __name__ == '__main__':
    path = 'images/daiyutong.png'
    image_display(path)

效果展示:

OpenCV-Python在一個窗口中顯示多幅圖像_python

到此這篇關於Python OpenCV一個窗口中顯示多幅圖像的文章就介紹到這瞭,更多相關Python OpenCV圖像內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: