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 自帶字體),還可以進一步添加日期、天氣等信息。