网络编程
位置:首页>> 网络编程>> Python编程>> Python OpenCV一个窗口中显示多幅图像

Python OpenCV一个窗口中显示多幅图像

作者:Hong_Youth  发布时间:2023-12-09 19:38:04 

标签: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)

效果展示:

Python OpenCV一个窗口中显示多幅图像

来源:https://blog.51cto.com/u_15483653/4904093

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com