文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PythonOpenCV一个窗口中显示多幅图像

2024-04-02 19:55

关注

在使用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图像内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯