【OpenCV】绘制桌面锁屏时钟-LMLPHP

目录

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 

【OpenCV】绘制桌面锁屏时钟-LMLPHP

2 程序设计

       在桌面锁屏时钟程序中,主要使用了OpenCV库的以下几个函数:

  • cv2.imread()
  • cv2.putText()
  • cv2.imshow()

cv2.imread() 函数用于加载背景图片,函数用法如下:

cv2.putText() 函数用于在图像上绘制文本,函数用法如下:

cv2.imshow() 函数用于显示图像,函数用法如下:

在 OpenCV 中读取和显示图像的步骤如下:

  1. 使用 cv2.imread() 读取图像。
  2. 创建一个 GUI 窗口并使用 cv2.imshow() 显示图像。
  3. 使用函数 cv2.waitkey() 等待用户操作。
  4. 使用 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_TRIPLEX
   org = (w//3, h//8)
   fontScale = 15
   fontColor = (255, 255, 255) # in BRG mode
   thickness = 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()

以下是显示效果:

【OpenCV】绘制桌面锁屏时钟-LMLPHP

3 改进

        本文主要使用 OpenCV 库的 putText() 函数,在背景图上添加时间,实现桌面锁屏时钟功能。后续有时间的话,可以考虑使用自定义字体(非 OpenCV 自带字体),还可以进一步添加日期、天气等信息。

03-02 04:20