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图像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
jupyter notebook 恢复误删单元格或者历史代码的实现
这篇文章主要介绍了jupyter notebook 恢复误删单元格或者历史代码的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-04-04Python利用format函数实现对齐打印(左对齐、右对齐与居中对齐)
format是字符串内嵌的一个方法,用于格式化字符串,下面这篇文章主要给大家介绍了关于Python利用format函数实现对齐打印(左对齐、右对齐与居中对齐)的相关资料,需要的朋友可以参考下2022-04-04
最新评论