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)
效果展示:
来源:https://blog.51cto.com/u_15483653/4904093
0
投稿
猜你喜欢
- 这里有numpy数组的相关介绍https://www.jb51.net/article/130657.htm排序numpy与python列表
- 1.本人第一次学python做出来的,当时满满的成就感,当作纪念!!!!!非常简单,复制即可使用代码块import json#把字符串类型的
- pygame介绍Python Pygame 是一款专门为开发和设计 2D 电子游戏而生的软件包,它支 Windows、Linux、Mac O
- 上一篇介绍了 HTML5 中 Canvas 的基本概念,这篇将要介绍一下 Canvas&n
- 有时候需要对有角度的矩形框内图像从原图片中分割出来。这里的程序思想是,先将图片进行矩形角度的旋转,使有角度的矩形处于水平状态后,根据原来坐标
- 背景在某些场景下,我们可能会大量的使用字节数组,比如IO操作、编解码,如果不进行优化,大量的申请和释放字节数组会造成一定的性能损耗,因此有必
- 如下所示:# -*- coding: utf-8 -*-# @Time :18-8-2 下午3:23import sysreload(sys
- 在IE浏览器调试代码,我们可以选择使用 IE WebDeveloper但是我个人用惯了ff浏览器下的firebug,所以在网上搜了一下,如果
- php fread函数用于读取文件(可安全用于二进制文件),其语法是fread(file,length),参数file必需,指规定要读取打开
- 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们
- for循环语句的对象是可迭代对象,可迭代对象需要实现__iter__或iter方法,并返回一个迭代器,什么是迭代器呢?迭代器只需要实现 __
- 在os模块中提供了两种调用 cmd 的方法,os.popen() 和 os.system()os.system(cmd) 是在执行comma
- 下面直接记录下配置主从库的操作:(本文用的是mysql5.0以上)1.在主库建立要同步的数据库,建立主库的帐号和修改主库配置首先连接上数据库
- 代码如下:title=request("title") title=replace(title,"chr(3
- 很多开发者进行数据库设计的时候往往并没有太多的考虑char, varchar类型,有的是根本就没注意,因为存储价格变得越来越便宜了,忘记了最
- 1. 复制表结构及其数据:create table table_name_new as select * from table_name_o
- 关于jQuery的链式调用真正有意义的链式调用也就是方法链(method chaining)。方法链这个词是有的,而且使用的很广泛。其实很多
- 一、条件变量与互斥锁条件变量是基于互斥锁的,它必须基于互斥锁才能发挥作用;条件变量并不是用来保护临界区和共享资源的,它是用来协调想要访问共享
- 最近真的感觉到了python生态的强大(倒吸一口凉气)现在介绍一个可以生成动态二维码的库(myqr)效果如图:第一步要安装myqr库在cmd
- 业务场景:1、在数据库表中的数据,要求记录每一条新增数据的创建时间,时间格式要求明确至:年月日:时分秒。2、在数据库表中的数据,要求记录每一