【OpenCV】绘制桌面锁屏时钟

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 中读取和显示图像的步骤如下:

  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()

以下是显示效果:

3 改进

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/421142.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NX二次开发:ListingWindow窗口的应用

一、概述 在NX二次开发的学习中,浏览博客时发现看到[社恐猫]和[王牌飞行员_里海]这两篇博客中写道有关信息窗口内容的打印和将窗口内容保存为txt,个人人为在二次开发项目很有必要,因此做以下记录。 ListingWindow信息窗口发送信息四种位置类型 设置Listi…

【VPX637】基于XCKU115 FPGA+ZU15EG MPSOC的6U VPX双FMC接口通用信号处理平台

VPX637是一款基于6U VPX总线架构的通用实时信号处理平台,该平台采用一片Xilinx的高性能Kintex UltraScale系列FPGA(XCKU115-2FLVF1924I)作为预处理单元,外挂2个FMC扩展接口,来完成数据采集、数据回放以及实时信号处理算…

NLP Seq2Seq模型

🍨 本文为[🔗365天深度学习训练营学习记录博客🍦 参考文章:365天深度学习训练营🍖 原作者:[K同学啊 | 接辅导、项目定制]\n🚀 文章来源:[K同学的学习圈子](https://www.yuque.com/mi…

wireshark抓取localhost(127.0.0.1)数据包

打开wireshark中,在"capture"菜单中,选择"interfaces"子菜单,在列出的接口中选中"Adapter for loopback traffic capture"即可。 必须安装了Npcap才有此选项,否则需要重新安装wireshark。 抓包截图…

Vue+SpringBoot打造城市桥梁道路管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询城市桥梁4.2 新增城市桥梁4.3 编辑城市桥梁4.4 删除城市桥梁4.5 查询单个城市桥梁 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的城市桥梁道路管理系统,支持…

gpt批量工具,gpt批量生成文章工具

GPT批量工具在今天的数字化时代扮演着越来越重要的角色,它们通过人工智能技术,可以自动批量生成各种类型的文章,为用户提供了便利和效率。本文将介绍5款不同的GPT批量工具,并介绍一款知名的147GPT生成工具,以及另外一款…

beets,一个有趣的 Python 音乐信息管理工具!

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站AI学习网站。 目录 前言 什么是Beet库? 安装Beet库 使用Beet库 Beet库的功能特性 1. 多种音乐格式支持 2. 自动标签识…

ECMAScript-262 @2023版本中的关键字和保留字

1、什么是标识符? 所谓标识符,就是javascript里的变量、函数、属性或函数参数的名称,可由一个或多个字符组成,当然标识符有命名规范 标识符第一个字符必须是 一个字母、下划线(_)或美元符号($…

在 Rust 中实现 TCP : 1. 联通内核与用户空间的桥梁

内核-用户空间鸿沟 构建自己的 TCP栈是一项极具挑战的任务。通常,当用户空间应用程序需要互联网连接时,它们会调用操作系统内核提供的高级 API。这些 API 帮助应用程序 连接网络创建、发送和接收数据,从而消除了直接处理原始数据包的复杂性。…

烧脑问题解决办法:如何选择一款合适自己的手机流量卡

现在社会人们越来越离不开手机了,手机给我们生活带来了翻天覆地的变化,手机需要最多的就是流量了,所以选择一款合适自己的手机流量卡就显得尤为重要了,今天小编就给大家来分享一下我的经验,希望对大家能有帮助&#xf…

STM32合并烧录IAP+APP

STM32合并烧录IAPAPP 通过查找相关资料 有以下几种合并方法 第一种直接将二进制文件用记事本合并 而要合并的就是就将IAP最后的一行删除,然后将APP程序追加在后面。 (修改前) 把APP的.hex 全部内容拷贝复制到 刚才删掉结束语句的 IAP的.…

基于springboot+vue的公交线路查询系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

如何用ChatGPT+GEE+ENVI+Python进行高光谱,多光谱成像遥感数据处理?

原文链接:如何用ChatGPTGEEENVIPython进行高光谱,多光谱成像遥感数据处理? 第一:遥感科学 从摄影侦察到卫星图像 遥感的基本原理 遥感的典型应用 第二:ChatGPT ChatGPT可以做什么? ChatGPT演示使用 …

CSS的弹性布局

CSS 的弹性布局 前言 前端中为了实现页面的布局效果,采用的一个技术手段,它在前端开发的技术场景是非常广泛的 实现上述区域的页面相关的布局效果,就可以使用弹性布局来完成 弹性布局(flex布局) flex 是 flexible box 的缩写,…

解锁AI大模型秘籍:未来科技的前沿探索

在当今这个技术高速发展的时代,人工智能(AI)已经成为了我们生活中不可或缺的一部分。从简单的个人助手到复杂的数据分析和决策制定,AI的应用范围日益扩大,其目的是为了让我们的生活变得更加智能化。本文旨在探讨AI如何…

让边缘智能助力配电房监测,P1600网关引领智慧新潮

科技与生活的交融 在现代社会的脉搏中,科技与生活紧密交融。我们的生活方式,正在由传统的模式,逐步向智能化、便捷化的方向迈进。配电房作为城市的重要基础设施,其稳定运行关系到千家万户的生活和工作。如何有效监控配电房的状态…

Linux技巧|centos7|重新认识和学习egrep和grep命令

前言: 相信提高文本检索工具,大家脑海里肯定有很多工具会自动跳出来,比如,grep,egrep,sed,cat,more,less,cut,awk,vim,vi…

剑指offer刷题记录Day 1 03.数组中重复的数字 ---> 06.从尾到头打印链表

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 0、关于核心代码模式该怎么刷题?1、…

1_SQL

文章目录 前端复习SQL数据库的分类关系型数据库非关系型数据库(NoSQL) 数据库的构成软件架构MySQL内部数据组织方式 SQL语言登录数据库数据库操作查看库创建库删除库修改库 数据库中表的操作选择数据库创建表删除表查看表修改表 数据库中数据的操作添加数…

MATLAB练习题:排队论问题的模拟

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 下面我们来看一道排队论的题目。假设某银行工作时间内只有一个…