【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() 提取数字的边缘,并进行显示。

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker的简单使用

在一些进行使用靶场或者工具的时候,我们可以用docker在线拉取,就可以省去手动搭建靶场的过程 一、docker的配置 因为docker是默认从docker的官网进行拉取,所以拉取经常速度很慢或者失败,我们先要进行一下配置,让他优…

安卓手机如何使用JuiceSSH实现公网远程连接本地Linux服务器

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

Frida-Hook-Native层操作大全

前期准备 使用 jadx 进行逆向工程的基础知识。能够理解 Java 代码。能够编写简短的 JavaScript 代码片段。熟悉 adb。已 root 的设备。对 x86/ARM64 汇编和逆向工程有基础了解。 1、Hook Native层中调用的函数并且读取传入的参数 对于Native层的函数Hook,我们使用…

2024.3.7

1、基于UDP的网络聊天室 服务器&#xff1a; #include<myhead.h>//定义一个结构体存储成员信息 typedef struct Node {struct sockaddr_in cin;struct Node *next; }*Linklist;//定义一个结构体表示消息类型 typedef struct _msg {char code; //L:登录&#xff0c;C…

vue3+element plus 实现百度地图显示路径

添加依赖 <!-- index.html --><script type"text/javascript" src"//api.map.baidu.com/getscript?v3.0&akyI6kBeC9G4LntEWXklE2iNHwRUrmFEQc"></script><script type"text/javascript" src"//api.map.baidu.co…

利用Python爬取高德地图全国地铁站点信息

利用Python中的requests库进行地铁站点信息的获取,同时将数据保存在本机excel中 # 首先引入所需要的包 import requests from bs4 import BeautifulSoup import pandas as pd import json# 发送 GET 请求获取网页内容 url http://map.amap.com/subway/index.html response r…

【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…

ospf虚链路实验简述

1、ospf虚链路实验简述 ospf虚链路配置 为解决普通区域不在骨干区域旁&#xff0c;通过配置Vlink-peer实现不同区域网络设备之间建立逻辑上的连接。 实验拓扑图 r1: sys sysname r1 undo info enable int loopb 0 ip add 1.1.1.1 32 ip add 200.200.200.200 32 quit int e0/0/…

模拟实现std::string类(包含完整、分文件程序)

std库中的string是一个类&#xff0c;对string的模拟实现&#xff0c;既可以复习类的特性&#xff0c;也可以加深对std::string的理解。 &#x1f308;一、搭建框架 ☀️1.新命名空间 本质上string是一个储存在库std里面的类&#xff0c;现在需要模拟实现一个string类&#…

python基础——入门必备知识

&#x1f4dd;前言&#xff1a; 本文为专栏python入门基础的第一篇&#xff0c;主要带大家先初步学习一下python中的一些基本知识&#xff0c;认识&#xff0c;了解一下python中的一些专有名词&#xff0c;为日后的学习打下良好的基础,。本文主要讲解以下的python中的基本语法&…

力扣706:设计哈希映射

题目&#xff1a; 不使用任何内建的哈希表库设计一个哈希映射&#xff08;HashMap&#xff09;。 实现 MyHashMap 类&#xff1a; MyHashMap() 用空映射初始化对象void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中&#x…

tcpdump使用pcap-filter抓Vxlan包内数据

目录 1. 背景2. 参考3. 概念4. 环境5. 用法5.1 抓vxlan通讯中的icmp包5.2 tcpdump抓包命令解析5.2.1 tcpdump命令说明5.2.2 Vxlan协议报文解析 5.3 其他抓包例子5.3.1 抓包示例15.3.2 抓包示例2 1. 背景 看vxlan协议时&#xff0c;发现可以使用tcpdump高级用法&#xff08;pca…

Unity Samples和帧动画的问题

拖动序列帧图片和自己创建clip的帧率不同 我今天在创建帧动画的时候用了两种方式第一种是直接拖动序列帧图片到Hierachy&#xff0c;然后生成的第二种是这样我发现两者播放的动画速率不一样最后查了半天查不到原因。最后发现是Samples的原因&#xff0c;而且Unity把Samples这个…

智能控制:物联网智能插座对接文档

介绍 一开始买的某米的插座&#xff0c;但是好像接口不开放&#xff0c;所以找到了这个插座&#xff0c;然后自己开发了下&#xff0c;用接口控制插座开关。wifi的连接方式&#xff0c;通电后一般几秒后就会连接上wifi&#xff0c;这个时候通过接口发送命令给他。 产品图片 通…

b站小土堆pytorch学习记录—— P25-P26 网络模型的使用和修改、保存和读取

文章目录 一、修改1.方法2.代码 二、保存和读取1.方法2.代码&#xff08;1&#xff09;保存&#xff08;2&#xff09;加载 3.陷阱 一、修改 1.方法 add_module(name: str, module: Module) -> None name 是要添加的子模块的名称。 module 是要添加的子模块。 调用 add_m…

Android车载开发之AAOS快速入门

一、概述 在正式介绍Android Automotive OS之前,我们先弄清两个概念:Android Auto和Android Automotive OS。 Android Auto Android Auto 不是操作系统,而是一个应用或一个服务。当 Android 手机通过无线或有线方式连接到汽车时,Android 系统会将使用 Android Auto 服务…

python爬虫(一)

一、python中的NumPy模块&#xff08;数据的存储和处理&#xff09; 这里是下载完成之后的表现 &#xff08;1&#xff09;创建数组 1、使用array&#xff08;&#xff09;函数创建数组 使用array函数可以创建任意维度的的数组 下面是一个创建二维数组的代码示例 下面是代码…

每日五道java面试题之springMVC篇(一)

目录&#xff1a; 第一题. 什么是Spring MVC&#xff1f;简单介绍下你对Spring MVC的理解&#xff1f;第二题. Spring MVC的优点第三题. Spring MVC的主要组件&#xff1f;第四题. 什么是DispatcherServlet?第五题. 什么是Spring MVC框架的控制器&#xff1f; 第一题. 什么是S…

unity学习(49)——服务器三次注册限制以及数据库化角色信息4--角色信息数据库化

1.此处下断开始调试,list函数内就有问题&#xff1a; 2. 现在的问题是只读不写&#xff01;32行就是写入部分的代码&#xff1a; 3. 很奇怪&#xff0c;调试的时候确实是写进来了 程序正常执行后&#xff0c;文件中数据也没有消失 关闭服务器文件内容依旧正常。 players包含所…

安装sqlserver2022最新版只能使用.\SQLEXPRESS登录数据库怎么修改成.

.\SQLEXPRESS “服务器名称 localhost\SQLEXPRESS”中的 “SQLEXPRESS”就是数据库的实例名称/数据库名/服务器名&#xff0c; “localhost”即登录本计算机安装的数据库 安装sqlserver2022最新版只能使用.\SQLEXPRESS登录数据库怎么修改成. 2、查看SQL Server数据库的实例名…