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一个窗口中显示多幅图像的文章就介绍到这了,更多相关Python OpenCV图像内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python中opencv图像叠加、图像融合、按位操作的具体实现

    目录 1图像叠加 2图像融合 3按位操作 1图像叠加 可以通过OpenCV函数cv.add()或简单地通过numpy操作添加两个图像,res = img1 + img2.两个图像应该具有相同的深度和类型,或者第二个图像可以是标量值. NOTE: OpenCV添加是饱和操作,也就是有上限值,而Numpy添加是模运算. 添加两个图像时, OpenCV功能将提供更好的结果.所以总是更好地坚持OpenCV功能. 代码: import cv2 import numpy as np x = np.uint8

  • python opencv图像处理基本操作示例详解

    目录 1.图像基本操作 ①读取图像 ②显示图像 ③视频读取 ④图像截取 ⑤颜色通道提取及还原 ⑥边界填充 ⑦数值计算 ⑧图像融合 2.阈值与平滑处理 ①设定阈值并对图像处理 ②图像平滑-均值滤波 ③图像平滑-方框滤波 ④图像平滑-高斯滤波 ⑤图像平滑-中值滤波 3.图像的形态学处理 ①腐蚀操作 ②膨胀操作 ③开运算和闭运算 4.图像梯度处理 ①梯度运算 ②礼帽与黑帽 ③图像的梯度处理 5.边缘检测 ①Canny边缘检测 1.图像基本操作 ①读取图像 ②显示图像 该函数中,name是显示窗口的名字

  • python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)

    图像素描特效 图像素描特效主要经过以下几个步骤: 调用cv.cvtColor()函数将彩色图像灰度化处理: 通过cv.GaussianBlur()函数实现高斯滤波降噪: 边缘检测采用Canny算子实现: 最后通过cv.threshold()反二进制阈值化处理实现素描特效. #coding:utf-8 import cv2 as cv import numpy as np #读取原始图像 img = cv.imread('d:/paojie.png') #图像灰度处理 gray = cv.cvtC

  • 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,

  • python opencv 实现读取、显示、写入图像的方法

    opencv是一个强大的图像处理和计算机视觉库,实现了很多实用算法,值得学习和深究下. opencv包安装 · 这里直接安装opencv-python包(非官方): pip install opencv-python 官方文档:https://opencv-python-tutroals.readthedocs.io/en/latest/ 1.读取图像 import cv2 image=cv2.imread("dog2.jpg",1) 说明: 第二个参数是一个标志,它指定了读取图像的方

  • python统计一个文本中重复行数的方法

    本文实例讲述了python统计一个文本中重复行数的方法.分享给大家供大家参考.具体实现方法如下: 比如有下面一个文件 2 3 1 2 我们期望得到 2,2 3,1 1,1 解决问题的思路: 出现的文本作为key, 出现的数目作为value,然后按照value排除后输出 最好按照value从大到小输出出来,可以参照: 复制代码 代码如下: in recent Python 2.7, we have new OrderedDict type, which remembers the order in

  • python 求一个列表中所有元素的乘积实例

    如下所示: # 求一个列表中所有元素的乘积 from functools import reduce lt = [1,2,3,4,5] ln = reduce(lambda x,y:x * y,lt) print(ln) 以上这篇python 求一个列表中所有元素的乘积实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • python 计算一个字符串中所有数字的和实例

    如下所示: # 计算一个字符串中所有数字的和 def numsum(s): sum = 0 #定义变量,准备记录数字的和 for i in range(len(s)): #遍历字符串 if s[i] >= '0' and s[i] <= '9': #如果i处的字符属于数字字符 sum = sum + int(s[i]) #将字符转成int,求和 return sum s = input("请输入一个字符串:") print(numsum(s)) 以上这篇python 计算一

  • python 返回一个列表中第二大的数方法

    如下所示: # 返回一个列表中第二大的数 def second(ln): max = 0 s = {} for i in range(len(ln)): flag = 0 for j in range(len(ln)): if ln[i] >= ln[j] and i != j: flag = flag + 1 s[i] = flag if flag > max: max = flag print(s) for i in s: if s[i] == max - 1: break print(l

  • Python在Matplotlib图中显示中文字体的操作方法

    1.    说明 本篇主要针对在Ubuntu系统中,matplotlib显示不了中文的问题,尤其是在无法安装系统字体的情况下,解决Python绘图时中文显示的问题. 2.    在系统中安装字体 $ fc-list :lang=zh # 查看中文字体名称及其安装路径,相对于英文字体,中文字体文件一般较大. 如果无中文字体,可使用apt-get安装,具体方法如下: $ apt-cache search font|grep Chinese # 查看可安装的中文字体 $ sudo apt-get in

  • Python判断一个list中是否包含另一个list全部元素的方法分析

    本文实例讲述了Python判断一个list中是否包含另一个list全部元素的方法.分享给大家供大家参考,具体如下: 你可以用for in循环+in来判断 #!/usr/bin/env python # coding: utf-8 a = [1, 2, 3, 4, 5] b = [3, 4, 5] d = [False for c in b if c not in a] if d: print "a不包含b的所有元素" else: print "a包含b的所有元素"

  • Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】

    本文实例讲述了Python统计一个字符串中每个字符出现了多少次的方法.分享给大家供大家参考,具体如下: #coding=utf-8 #统计一个字符串中的每一个字符出现了多少次 #定义一个字符串 str = 'abbcccdddd' #在字符串的每一个字符之间插入一个空格组成一个新的字符串 str = ' '.join(str) #打印新的字符串看看 print('str = ',str) #将新字符串按空格分割成一个列表 li = str.split(' ') #打印新的列表 print('li

  • Python 从一个文件中调用另一个文件的类方法

    如果是在同一个 module中(也就是同一个py文件里),直接用就可以 如果在不同的module里,例如 a.py里有 class A: b.py 里有 class B: 如果你要在class B里用class A 需要在 b.py的开头写上 from a import A 举个例子: 比如我在文件lingkingtables.py的文件中构造了三个类,在另一个文件中想要引用这三个类,那么用如下语句即可 from lingkingtables import Lnode from lingking

随机推荐