OpenCV 是一个开源的计算机视觉(Computer Vision)与机器学习软件库,提供了多种图像处理算法与接口,用于解决计算机视觉相关问题。OpenCV 支持多平台与多语言,本文主要记录如何使用 OpenCV-Python 绘制桌面锁屏时钟。
目录
1 准备工作
2 程序设计
3 改进
1 准备工作
首先安装 Numpy 库和 OpenCV-Python 库,可以使用 pip 直接下载和安装,输入以下命令:
pip install numpy
pip install opencv-python
安装完成之后,使用以下代码查看 Numpy 和 OpenCV 版本:
import numpy as np
print(np.__version__)
import cv2
print(cv2.__version__)
cv2 是 OpenCV 的最新版本,控制台打印版本号就说明库安装好了。
接下来准备一张图片,分辨率建议 2K 以上,用于后续全屏显示的背景。需要注意 OpenCV 库支持以下类型的图片格式:
- Windows bitmaps – *.bmp, *.dib
- JPEG files – *.jpeg, *.jpg
- Portable Network Graphics – *.png
- WebP – *.webp
- Sun rasters – *.sr, *.ras
- TIFF files – *.tiff, *.tif
2 程序设计
在桌面锁屏时钟程序中,主要使用了OpenCV库的以下几个函数:
- cv2.imread()
- cv2.putText()
- cv2.imshow()
cv2.imread() 函数用于加载背景图片,函数用法如下:
Syntax: cv2.imread(path, flag)
flag: cv2.IMREAD_COLOR, cv2.IMREAD_GRAYSCALE, ect.
cv2.putText() 函数用于在图像上绘制文本,函数用法如下:
Syntax: cv2.putText(image, text, org, font, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])
cv2.imshow() 函数用于显示图像,函数用法如下:
Syntax: cv2.imshow(window_name, image)
在 OpenCV 中读取和显示图像的步骤如下:
- 使用 cv2.imread() 读取图像。
- 创建一个 GUI 窗口并使用 cv2.imshow() 显示图像。
- 使用函数 cv2.waitkey() 等待用户操作。
- 使用 cv2.destroyAllWindows() 从内存中删除图像窗口。
桌面锁屏时钟应用程序代码如下:
#-*- Coding: utf-8 -*-import cv2
import numpy as np
from datetime import datetime"""putText()用法:cv2.putText(image, text, org, font, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])"""def main():# 加载背景图像path = r'./src/Appearance.png'img_bg = cv2.imread(path, cv2.IMREAD_COLOR)# 获取宽、高信息h, w, _ = img_bg.shape# 定义字体属性font = cv2.FONT_HERSHEY_TRIPLEXorg = (w//3, h//8)fontScale = 15fontColor = (255, 255, 255) # in BRG modethickness = 12# 创建窗口,并设置全屏属性cv2.namedWindow('win', cv2.WINDOW_NORMAL)cv2.setWindowProperty('win', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)while True:# 获取当前时间current_time = datetime.now().strftime('%H:%M:%S')# 使用np.copy()进行深拷贝,并添加时间img = cv2.putText(np.copy(img_bg), current_time, org, font, fontScale, fontColor, thickness)# 显示图像cv2.imshow('win', img)if cv2.waitKey(10) & 0xFF == 27:# 等待10ms, 监测Esc按下事件break# 关闭窗口cv2.imwrite('./src/screen_clock.png', img)cv2.destroyAllWindows()if __name__ == "__main__":main()
以下是显示效果:
3 改进
本文主要使用 OpenCV 库的 putText() 函数,在背景图上添加时间,实现桌面锁屏时钟功能。后续有时间的话,可以考虑使用自定义字体(非 OpenCV 自带字体),还可以进一步添加日期、天气等信息。