【OpenCV】仿 IOS 锁屏时钟

2024-03-07 23:52
文章标签 时钟 opencv ios 锁屏

本文主要是介绍【OpenCV】仿 IOS 锁屏时钟,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenCV 是一个开源的计算机视觉(Computer Vision)与机器学习软件库,提供了多种图像处理算法与接口。在图像处理中,按位运算是一类重要的运算,可以用于提取图像的重要部分。本文主要记录如何使用 OpenCV-Python 绘制仿 IOS 的锁屏时钟。

目录

1 函数介绍

2 程序设计


1 函数介绍

        在图像处理中,按位运算是一类重要的运算。OpenCV 提供了以下 4 种按位运算,包括:

  • cv2.bitwise_and()
  • cv2.bitwise_or()
  • cv2.bitwise_xor()
  • cv2.bitwise_not()

另外,按位运算可以配合图像掩膜使用,用于提取图像中的重要部分。

cv2.bitwise_and() 函数用法:

Syntax: cv2.bitwise_and(source1, source2, destination, mask)

cv2.bitwise_or() 函数用法:

Syntax: cv2.bitwise_or(source1, source2, destination, mask)

cv2.bitwise_xor() 函数用法:

Syntax: cv2.bitwise_xor(source1, source2, destination, mask)

cv2.bitwise_not() 函数用法:

Syntax: cv2.bitwise_not(source, destination, mask)

  • source:输入图像,支持单通道、8bit 或浮点数格式;
  • destination:输出图像,大小与格式需与 source 保持一致;
  • mask:运算掩码,格式为8bit 单通道。

2 程序设计

以下是 Python 代码:

#-*- Coding: utf-8 -*-
import cv2
import numpy as np
from datetime import datetimenum_mask = {n: cv2.imread(f'./src/{n}.PNG', cv2.IMREAD_GRAYSCALE) for n in range(10)}def draw_number(image, slice, iy, ix):# 根据ix,iy坐标放置数字slice_ext = np.zeros(image.shape, dtype=np.uint8)slice_ext[iy: iy+slice.shape[0], ix: ix+slice.shape[1]] = slice# 使用cv2.bitwise_or()函数叠加dst_img = cv2.bitwise_or(image, slice_ext)return dst_imgdef draw_clock(image, current):# 创建纯色图像height, width, channel = 1179, 960, 3color_light = np.zeros((height, width, channel), dtype=np.uint8)color_light[:] = (0xFA, 0xC5, 0x51) # in BGR modecolor_deep = np.zeros((height, width, channel), dtype=np.uint8)color_deep[:] = (0xBA, 0x62, 0x00) # in BGR mode# 使用cv2.bitwise_and()函数给数字上色hour_slice1 = cv2.bitwise_and(color_deep, color_deep, mask=num_mask[current.hour // 10])hour_slice2 = cv2.bitwise_and(color_light, color_light, mask=num_mask[current.hour % 10])minute_slice1 = cv2.bitwise_and(color_deep, color_deep, mask=num_mask[current.minute // 10])minute_slice2 = cv2.bitwise_and(color_light, color_light, mask=num_mask[current.minute % 10])# 绘制时间col_min = (image.shape[0]-height)//2row_min = (image.shape[1]-width)//6image = draw_number(image, hour_slice1, col_min, row_min)image = draw_number(image, hour_slice2, col_min, row_min+image.shape[1]//8)image = draw_number(image, minute_slice1, col_min, row_min+image.shape[1]//8*3)image = draw_number(image, minute_slice2, col_min, row_min+image.shape[1]//8*4)return imagedef main():# 新建背景图像row, col, channel = 2160, 3840, 3img_bg = np.zeros(shape=(row, col, channel), dtype=np.uint8)# 创建窗口,并设置属性cv2.namedWindow('win', cv2.WINDOW_NORMAL)cv2.setWindowProperty('win', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)# 显示图像while True:# 生成带时间的图像,并显示img_clock = draw_clock(np.copy(img_bg), datetime.now())cv2.imshow('win', img_clock)if cv2.waitKey(10) & 0xFF == 27:# 等待10ms,检测Esc按下事件break# 关闭窗口cv2.destroyAllWindows()if __name__ == "__main__":main()

以下是显示效果:

以下是本文的彩蛋,使用 cv2.Sobel() 提取数字的边缘,并进行显示。

如有错误的地方,欢迎指正。

这篇关于【OpenCV】仿 IOS 锁屏时钟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/785262

相关文章

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函