opencv 按键开启连续截图,并加载提示图片

news2024/9/24 1:19:23

背景图+小图
在这里插入图片描述
在这里插入图片描述
键盘监听使用的是pynput 库
保存图片时使用了年月日时分秒命名
原图:
请添加图片描述
请添加图片描述

from pynput import keyboard
import cv2
import time


# 键盘监听
def on_press(key):
    global jie
    global guan
    if key.char == 'a':
        jie = True
    elif key.char == 'd':
        jie = False
    elif key.char == 'q':
        guan = True


listener = keyboard.Listener(on_press=on_press)
listener.start()

img1_1 = cv2.imread("./img1_1.jpg")  # 正在截图(准备2张图片)
img1_2 = cv2.imread("./img1_2.jpg")  # 没有截图(准备两张图片)

# 保存截图程序
# # 截图 y1 y2 x1 x2
# # # 531 450 644 479
# x1, y1, x2, y2 = 541, 450, 644, 479
# img1_1 = img1_1[y1:y2, x1:x2]
#
# cv2.namedWindow('f2100', cv2.WINDOW_NORMAL)
# cv2.imshow('f2100', img1_1)
# cv2.waitKey(0)
# path_img = "./ce/"
# img_name = "img1_2" + ".jpg"
#
# cv2.imwrite(img_name, img1_1)


img1_h, img1_w, img1_3 = img1_1.shape
img2_h, img2_w, img2_3 = img1_2.shape

cap = cv2.VideoCapture("./data_ce_mp4/9.mp4")

# 命名区分
n1 = 0
# 跳帧计数
zhen = 0

# 截图状态开关
jie = False
# 程序关闭按钮
guan = False

# 绘制文字
font = cv2.FONT_HERSHEY_SIMPLEX

while cap.isOpened():
    # 逐帧读取
    ret, image = cap.read()

    n1 += 1    # 取名字
    zhen += 1  # 多少帧截取一次

    # 视频结束则关闭程序
    if not ret:
        break

    # 按下则关闭程序
    if guan:
        break

    # 跳帧计数
    if zhen >= 20:

        # 截图状态开关
        if jie:
            # tm_year=2024, tm_mon=7, tm_mday=22, tm_hour=11, tm_min=1, tm_sec=53, tm_wday=0
            # 按照年月日时分秒来命名
            localtime = time.localtime(time.time())
            # print(localtime)
            tm_year = str(localtime.tm_year)
            tm_mon = str(localtime.tm_mon)
            tm_mday = str(localtime.tm_mday)
            tm_hour = str(localtime.tm_hour)
            tm_min = str(localtime.tm_min)
            tm_sec = str(localtime.tm_sec)

            # 保证年月日时分秒是定长的
            # 月
            if len(tm_mon) != 2:
                tm_mon = "0" + tm_mon
            # 日
            if len(tm_mday) != 2:
                tm_mday = "0" + tm_mday
            # 时
            if len(tm_hour) != 2:
                tm_hour = "0" + tm_hour
            # 分s
            if len(tm_hour) != 2:
                tm_min = "0" + tm_min
            # 秒
            if len(tm_sec) != 2:
                tm_sec = "0" + tm_sec
            # print(tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec)

            path_img = "./ce/"
            img_name = tm_year + tm_mon + tm_mday + tm_hour + tm_min + tm_sec + "_" + str(n1) + ".jpg"

            cv2.imwrite(path_img + img_name, image)
            print("正在截图")
            print(img_name)
            zhen = 0

    # 将小图片按位置百分比放入大图片中
    h, w, _1 = image.shape
    # 截图 y1 y2 x1 x2
    x1_1, y1_1, x2_1, y2_1 = 0 + int(0.1 * w), 0 + int(0.2 * h), img1_w + int(0.1 * w), img1_h + int(0.2 * h)
    x1_2, y1_2, x2_2, y2_2 = 0 + int(0.1 * w), 0 + int(0.2 * h), img2_w + int(0.1 * w), img2_h + int(0.2 * h)

    # 按照状态不同,叠加的图片不同
    if jie:
        string_jie = "yes"
        image[y1_1:y2_1, x1_1:x2_1] = img1_1
    else:
        string_jie = "No!"
        print("没有截图")
        image[y1_2:y2_2, x1_2:x2_2] = img1_2

    # 绘制字母
    # 参数:图像、文字、坐标、支持的字体、大小、颜色、粗细
    # cv2.putText(image, string_jie, (int(0.1 * w), int(0.17 * h)), font, 2, (0, 0, 255), 3)

    # print(x1_1, y1_1, x2_1, y2_1)

    # 显示的图像是否可以鼠标拖动缩放
    # cv2.namedWindow('f2100', cv2.WINDOW_NORMAL)
    cv2.imshow('f2100', image)
    cv2.waitKey(1)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深度学习】LLaMA-Factory 大模型微调工具, 大模型GLM-4-9B Chat ,微调与部署 (2)

资料: https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md https://www.53ai.com/news/qianyanjishu/2015.html 代码拉取: git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factorybuild镜像和执行镜像: …

如何借助生成式人工智能引领未来的科技狂潮

如何借助生成式人工智能引领未来的科技狂潮 1. 生成式AI的现状1.1 技术基础1.1.1 深度学习1.1.2 生成对抗网络(GANs)1.1.3 变分自编码器(VAEs) 1.2 主要应用1.2.1 语言模型1.2.2 图像生成1.2.3 音频与视频生成 2. 未来的发展趋势2…

2024/7/23 英语每日一段

As malware has improved and evolved, it has pushed defense software to require constant connection and more extensive control. That deeper access also introduces a far higher possibility that security software—and updates to that software—will crash the …

6.乳腺癌良性恶性预测(二分类、逻辑回归、PCA降维、SVD奇异值分解)

乳腺癌良性恶性预测 1. 特征工程1.1 特征筛选1.2 特征降维 PCA1.3 SVD奇异值分解 2. 代码2.1 逻辑回归、二分类问题2.2 特征降维 PCA2.3 SVD奇异值分解 1. 特征工程 专业上:30个人特征来自于临床一线专家,每个特征和都有医学内涵;数据上&…

SpringBoot启动命令过长

Error running DromaraApplication: Command line is too long. Shorten command line for DromaraApplication or also for Spring Boot default configuration?

探索LLM世界:新手小白的学习路线图

随着人工智能的发展,语言模型(Language Models, LLM)在自然语言处理(NLP)领域的应用越来越广泛。对于新手小白来说,学习LLM不仅能提升技术水平,还能为职业发展带来巨大的机遇。那么,…

matlab仿真 模拟调制(下)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第五章内容,有兴趣的读者请阅读原书) clear all ts0.001; t0:ts:10-ts; fs1/ts; dffs/length(t); msgrandi([-3 3],100,1); msg1msg*ones(1,fs/10); msg2reshape(ms…

opencv grabCut前景后景分割去除背景

参考: https://zhuanlan.zhihu.com/p/523954762 https://docs.opencv.org/3.4/d8/d83/tutorial_py_grabcut.html 环境本次: python 3.10 提取前景: 1、需要先把前景物体框出来 需要坐标信息,可以用windows自带的画图简单提取像素…

敏捷CSM认证:精通敏捷Scum估算方法,高效完成项目!

咱们做项目的时候可能都遇到过这种情况:项目一开始信心满满,觉得 deadline 稳了。结果呢?各种意外状况频出,时间好像怎么都不够用了,最后项目只能无奈延期,整个团队都像霜打的茄子。 说到底,还…

Elasticsearch:Golang ECS 日志记录 - zap

ECS 记录器是你最喜欢的日志库的格式化程序/编码器插件。它们可让你轻松地将日志格式化为与 ECS 兼容的 JSON。 编码器以 JSON 格式记录日志,并在可能的情况下依赖默认的 zapcore/json_encoder。它还处理 ECS 错误格式的错误字段记录。 默认情况下,会添…

集合的概念

目录 概述 1 集合定义 1.1 基本定义 1.2 元素和集合的关系表述 1.3 集合分类 1.4 集合描述 1.5 集合关系描述 2 集合的运算 2.1 集合关系的定义 2.2 集合的运算 概述 在高等数学中,集合是指由一些具有共同特征的对象组成的整体。这些对象可以是数字、字母…

最短路径 | 743. 网络延迟时间之 Dijkstra 算法和 Floyd 算法

目录 1 基于 Dijkstra 算法1.1 代码说明1.2 完整代码 2 基于 Floyd 算法2.1 代码说明2.2 完整代码 前言:我在做「399. 除法求值」时,看到了基于 Floyd 算法的解决方案,突然想起来自己还没有做过最短路径相关的题。因此找来了「743. 网络…

灰色关联分析【系统分析+综合评价】

系统分析: 判断哪个因素影响最大 基本思想:根据序列曲线几何形状的相似程度来判断其练习是否紧密 绘制统计图并进行分析 确定子序列和母序列 对变量进行预处理(去量纲、缩小变量范围) 熟练使用excel与其公式和固定&#xff08…

微服务安全——OAuth2详解、授权码模式、SpringAuthorizationServer实战、SSO单点登录、Gateway整合OAuth2

文章目录 Spring Authorization Server介绍OAuth2.0协议介绍角色OAuth2.0协议的运行流程应用场景授权模式详解客户端模式密码模式授权码模式简化模式token刷新模式 OAuth 2.1 协议介绍授权码模式PKCE扩展设备授权码模式拓展授权模式 OpenID Connect 1.0协议Spring Authorizatio…

C语言数据结构:基于EasyX的飞机订票系统,有前端界面

数据结构课程设计说明书 学 院、系: 软件学院 专 业: 软件工程 班 级: 学 生 姓 名: 范 学 号: 设 计 题 目: 飞机订票系统 起 迄 日 期: 2024年6月18日~ 20…

笔记小结:现代卷积神经网络之批量归一化

本文为李沐老师《动手学深度学习》笔记小结,用于个人复习并记录学习历程,适用于初学者 训练深层神经网络是十分困难的,特别是在较短的时间内使他们收敛更加棘手。 本节将介绍批量规范化(batch normalization)&#xf…

vue3 + ts 报错:Parsing error: Unexpected token : eslint

报错:Parsing error: Unexpected token : eslint 解决: 在 .eslintrc.json 文件中加入 "parser": "babel/eslint-parser"配置 “parser”: “babel/eslint-parser” 告诉 ESLint 在检查代码之前,先使用 Babel 的解析器…

lua 游戏架构 之 游戏 AI (三)ai_attack

这段Lua脚本定义了一个名为 ai_attack 的类,继承自 ai_base 类。 lua 游戏架构 之 游戏 AI (一)ai_base-CSDN博客文章浏览阅读119次。定义了一套接口和属性,可以基于这个基础类派生出具有特定行为的AI组件。例如,可以…

深度学习:引领未来的人工智能技术(比喻)

深度学习:引领未来的人工智能技术 引言 随着人工智能(AI)的快速发展,深度学习(Deep Learning)作为其中最具革命性的技术之一,正在改变着各个行业。从自动驾驶到医疗诊断,从自然语言…

python—selenium爬虫

文章目录 Selenium与Requests对比一、工作原理二、功能特点三、性能表现 下载对应驱动1.首先我们需要打开edge浏览器,打开设置,找到“关于Microsoft Edge”,点击进入查看浏览器版本。2.查找版本之后,搜索edge驱动下载,…