跳转至

综合实验-窗口显示图像

概要

本节讲解了如何使用HighGUI显示单张图片,以及在多个窗口上显示图片

keywords 图片 展示 窗口 显示

综合实验1 - 单个窗口展示图像

这里我们设计一个综合实验, 组合这节我们所学到的知识。

show-sigle-image.py

import numpy as np
import cv2

# 导入一张图像 模式为彩色图片
img = cv2.imread('cat.jpg', cv2.IMREAD_COLOR)

# 展示图像
cv2.imshow('image',img)
# 等待按键摁下 最多5s钟
# 如果超时key_pressed 就会等于-1
key_pressed = cv2.waitKey(5000)
print("有按键摁下或者已超时")
# 使用chr() 
print("Key Pressed : {}  == {}".format(key_pressed, chr(key_pressed)))

# 关闭所有窗口
cv2.destroyAllWindows()
# 或者是这样, 销毁创建的单个窗口
# cv2.destroyWindow('image')

展示效果

Screenshot_20180120_231849.png

综合实验2 - 同时展示多个窗口

我们读入小猫的图片, 将其分别转换为IMREAD_COLORIMREAD_UNCHANGED

这里稍稍讲解一下IMREAD_UNCHANGED , 我们普通的图片BGR格式, 每个像素点的取值是从0-255, 用8bit的位去存储像素点的值. 而市面上大多数SLR 相机, 可以支持更高的颜色分辨率(颜色深度 , depth) , 可以使用16-bit来存储单个通道像素点的值(PNG图片或者TIFF图片)

同时将三者通过窗口展示.

源代码 show-multiple-windows.py

import numpy as np
import cv2

# 导入一张图像 模式为彩色图片 cv2.IMREAD_COLOR = 1
img_color = cv2.imread('cat.jpg', cv2.IMREAD_COLOR)
# 导入一张图片 模式为灰度图 cv2.IMREAD_GRAYSCALE = 0
img_gray = cv2.imread('cat.jpg', cv2.IMREAD_GRAYSCALE)
# 导入一张图片  cv2.IMREAD_UNCHANGED = -1 包括 alpha透明度通道 
img_alpha = cv2.imread('cat.jpg', cv2.IMREAD_UNCHANGED)

# 创建一个名字叫做 image_color 的窗口 窗口可拉伸
cv2.namedWindow('image_color', cv2.WINDOW_NORMAL)
# 在名字叫做 image_color 的窗口下展示图像 
cv2.imshow('image_color',img_color)

cv2.namedWindow('image_grayscale', cv2.WINDOW_NORMAL)
cv2.imshow('image_grayscale', img_gray)


cv2.namedWindow('image_alpha', cv2.WINDOW_NORMAL)
cv2.imshow('image_alpha', img_alpha)


# 检测按下的按钮
print("请按 按键 e (exit)键关闭窗口")
while True:
    key_pressed = cv2.waitKey(100)
    if key_pressed >= 0:
        # 打印一下按键记录
        print("Key Pressed : {}  == {}".format(key_pressed, chr(key_pressed)))
    # 匹配为e后 跳出 while循环
    if key_pressed == ord('e'):
        break

# 关闭所有打开的窗口
cv2.destroyAllWindows()

OUTPUT

'''
输出

请按 按键 e (exit)键关闭窗口
Key Pressed : 101  == e
'''

展示效果

Screenshot_20171211_183750.png