一个简单的摄像头应用程序4

news/2024/10/4 14:30:23 标签: python

我们进一步完善了这个app01.py,我们优化了界面使其更人性化,下面介绍中包含了原有的功能及新增的功能:
创建和管理文件夹:

create_folder 函数用于创建保存照片和视频的文件夹。
get_next_file_number 函数用于获取文件夹中下一个可用的文件编号。
图像处理:

pil_to_cv 函数用于将PIL图像转换为OpenCV图像。
remove_buttons 函数用于去除界面上的按钮。
add_timestamp 函数用于在图像上添加时间戳。
apply_filter 函数用于应用图像滤镜(灰度和模糊)。
鼠标回调:

mouse_callback 函数用于处理鼠标事件,包括按钮点击、区域选择等。
文件操作:

save_photo 函数用于保存照片。
start_recording 和 stop_recording 函数用于开始和停止录像。
switch_camera 函数用于切换摄像头。
open_photo_folder 函数用于打开照片文件夹。
绘制功能:

draw_buttons 函数用于在图像上绘制按钮。
draw_hints 函数用于在图像上绘制提示信息。
主函数:

main 函数是程序的入口点,负责初始化摄像头、设置鼠标回调、读取和处理图像、显示图像等。

python">import cv2
import os
import numpy as np
from PIL import Image, ImageDraw, ImageFont
import datetime
import webbrowser
import logging
import threading

# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# 检查并创建保存照片和视频的文件夹
def create_folder(folder_name):
    if not os.path.exists(folder_name):
        os.makedirs(folder_name)
    return folder_name

# 获取文件夹中的最大编号
def get_next_file_number(folder_name, file_extension):
    files = os.listdir(folder_name)
    files = [f for f in files if f.endswith(file_extension)]
    if files:
        numbers = [int(f.split('.')[0]) for f in files]
        return max(numbers) + 1
    else:
        return 1

# 将PIL图像转换为OpenCV图像
def pil_to_cv(image):
    return cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)

# 鼠标回调函数
def mouse_callback(event, x, y, flags, param):
    global next_photo_number, next_video_number, running, recording, out, frame, scale_factor, cam_index, roi, button_hints
    if event == cv2.EVENT_LBUTTONDOWN:
        if 10 <= x <= 100 and 10 <= y <= 50:  # 关闭按钮区域
            running = False
        elif 10 <= x <= 100 and 70 <= y <= 110:  # 拍照按钮区域
            threading.Thread(target=save_photo, args=(frame, next_photo_number)).start()
            next_photo_number += 1
        elif 10 <= x <= 100 and 130 <= y <= 170:  # 开始/停止录像按钮区域
            if not recording:
                start_recording()
            else:
                stop_recording()
        elif 10 <= x <= 100 and 190 <= y <= 230:  # 放大按钮区域
            scale_factor = min(3.0, scale_factor * 2)
        elif 10 <= x <= 100 and 250 <= y <= 290:  # 缩小按钮区域
            scale_factor = max(1.0, scale_factor / 2)
        elif 10 <= x <= 100 and 310 <= y <= 350:  # 切换摄像头按钮区域
            switch_camera()
        elif 10 <= x <= 100 and 370 <= y <= 410:  # 查看照片按钮区域
            open_photo_folder()
    elif event == cv2.EVENT_RBUTTONDOWN:
        roi[0], roi[1] = x, y
    elif event == cv2.EVENT_RBUTTONUP:
        roi[2], roi[3] = x - roi[

http://www.niftyadmin.cn/n/5690029.html

相关文章

开源 AI 智能名片 2+1 链动模式 S2B2C 商城小程序的数据运营策略与价值创造

一、引言 1.1 研究背景 在当今数字化时代&#xff0c;数据运营已成为企业发展的核心驱动力。开源 AI 智能名片 21 链动模式 S2B2C 商城小程序作为一种创新的营销工具&#xff0c;与数据运营紧密相连。该小程序通过集成人工智能、大数据分析等先进技术&#xff0c;能够实时收集…

论文阅读笔记-A Comparative Study on Transformer vs RNN in Speech Applications

前言 介绍 序列到序列模型已广泛用于端到端语音处理中,例如自动语音识别(ASR),语音翻译(ST)和文本到语音(TTS)。本文着重介绍把Transformer应用在语音领域上并与RNN进行对比。与传统的基于RNN的模型相比,将Transformer应用于语音的主要困难之一是,它需要更复杂的配…

如何对物理系统进行数学建模?

一、关键因素和步骤 对某一物理系统建模时&#xff0c;需要考虑以下关键因素和步骤&#xff1a; 系统定义与理解&#xff1a; 清晰定义系统边界和组成部分&#xff0c;理解系统的功能、结构和动力学特性。 分析系统输入、输出及其相互作用&#xff0c;确定系统的动态变量。 建…

Django学习笔记八:发布RESTful API

在Django中发布RESTful API通常使用Django REST Framework&#xff08;DRF&#xff09;&#xff0c;这是一个强大的、灵活的工具&#xff0c;用于构建Web API。以下是发布RESTful API的基本步骤&#xff1a; 1. 安装Django REST Framework 首先&#xff0c;确保你已经安装了D…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《计及效率和启停特性的大规模...电制氢多电解槽切换调度策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【大数据】Elasticsearch 实战应用总结

目录 1. 什么是 Elasticsearch2. Elasticsearch 的核心概念2.1 安装与配置1. 安装 Elasticsearch2. 配置 2.2 基本操作1. 创建索引2. 索引文档3. 查询文档 3. 实战案例3.1 案例&#xff1a;日志管理系统3.2 数据流示意图 4. 注意事项与优化建议总结 1. 什么是 Elasticsearch E…

使用 Python 实现图形学的着色器编程算法

目录 使用 Python 实现图形学的着色器编程算法引言1. 着色器编程概述1.1 定义1.2 着色器的工作原理1.3 着色器的优势 2. Python 中的着色器编程2.1 安装 PyOpenGL2.2 基础类着色器类顶点数据类渲染器类 2.3 示例程序 3. 着色器编程的优缺点3.1 优点3.2 缺点 4. 改进方向5. 应用…

SAP HCM 自定义累计期间

需求是按3月&#xff5e;8月&#xff0c;9月&#xff5e;次年2月&#xff0c;做为累计期间&#xff0c;怎么处理&#xff1f;