侦测键盘行为
使用 OpenCV 建立视窗后,除了打开图片进行预览,也可透过视窗侦测键盘按键,当按下按键时,即时取得该按键的 ASCII 代码,借由这种侦测键盘行为的方法,实现图像与键盘的互动 ( 例如透过键盘,直接调整图像的亮度或饱和度...等 )。
快速导览:
因为程序中的 OpenCV 会需要使用镜头或 GPU,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda ) ,并安装 OpenCV 函数库 ( 参考:OpenCV 函数库 )。
取得键盘按键的 ASCII 代码
透过 cv2.waitKey 的方法,能够在按下键盘时取得该按键的 ASCII 代码,取得代码后再透过 Python 内建的 chr 方法就能将 ASCII 转换为该按键所代表的 Unicode 字元。
参考:chr(x)
import cv2
cv2.namedWindow('oxxostudio') # 建立一個名為 oxxostudio 的視窗
while True:
keycode = cv2.waitKey(0) # 持續等待,直到按下鍵盤按鍵才會繼續
c = chr(keycode) # 將 ASCII 代碼轉換成真實字元
print(c, keycode) # 印出結果
if keycode == 27:
break # 如果代碼等於 27,結束迴圈 ( 27 表示按鍵 ESC )
cv2.destroyAllWindows()
键盘按键的 ASCII 代码表
下方图表列出常用的键盘按键 ASCII 代码对照表 ( Dec 字段 ):
透过键盘,调整图像的亮度和对比度
延伸“调整图像的对比和亮度”范例,将程序修改为按下键盘的上下左右时,可以调整图像的亮度和对比度。
import cv2
import numpy as np
img = cv2.imread('mona.jpg')
# 定義調整亮度對比的函式
def adjust(i, c, b):
output = i * (c/100 + 1) - c + b # 轉換公式
output = np.clip(output, 0, 255)
output = np.uint8(output)
return output
contrast = 0 # 初始化要調整對比度的數值
brightness = 0 # 初始化要調整亮度的數值
cv2.imshow('oxxostudio', img)
while True:
keycode = cv2.waitKey(0)
if keycode == 0:
brightness = brightness + 5 # 按下鍵盤的「上」,增加亮度
if keycode == 1:
brightness = brightness - 5 # 按下鍵盤的「下」,減少亮度
if keycode == 2:
contrast = contrast - 5 # 按下鍵盤的「右」,增加對比度
if keycode == 3:
contrast = contrast + 5 # 按下鍵盤的「左」,減少對比度
if keycode == 113:
contrast, brightness = 0, 0 # 按下鍵盤的「q」,恢復預設值
if keycode == 27:
break
show = img.copy() # 複製原始圖片
show = adjust(show, contrast, brightness) # 根據亮度和對比度的調整值,輸出新的圖片
cv2.imshow('oxxostudio', show)
cv2.destroyAllWindows()
微信扫码关注
抖音扫码关注