opencv在linux上调用usb摄像头进行拍照

功能

python 复制代码
1.按照指定的文件名创建文件夹,创建之前判断该文件夹是否存在
2.调用摄像头按可调整窗口大小的方式显示
3.按esc退出摄像头画面
4.按p保存当前摄像头的画面,并按当前时间为照片的名字进行保存

打开终端查看是否有摄像头

python 复制代码
ls /dev/video*

一般video1就是usb摄像头

代码

python 复制代码
import cv2
import datetime

创建文件夹函数

python 复制代码
# 创建文件夹函数
import os
def create_directory(directory_name):
    # 获取当前路径
    path = os.getcwd()
    # 拼接完整的路径
    full_path = os.path.join(path, directory_name)
    # 检查文件夹是否存在
    if not os.path.exists(full_path):
        print(f"文件夹 '{directory_name}' 不存在,现在创建。")
        os.makedirs(full_path)
    else:
        print(f"文件夹 '{directory_name}' 已经存在。")
    return full_path

显示摄像头画面并按p拍照函数

python 复制代码
def view_video(video_path):
    # 设置显示窗口的大小
    width,height = 800,600

    video = cv2.VideoCapture(video_path)
    if video.isOpened():
        '''把摄像头设置为1980 x 1080'''
        video.set(cv2.CAP_PROP_FRAME_WIDTH,1920)
        video.set(cv2.CAP_PROP_FRAME_HEIGHT,1080)
        video.set(cv2.CAP_PROP_FOURCC,cv2.VideoWriter.fourcc('M','J','P','G'))

        '''
            video.read() 一帧一帧地读取
            open 得到的是一个布尔值,就是 True 或者 False
            frame 得到当前这一帧的图像
        '''
        open, frame = video.read()
    else:
        open = False

    while open:
        ret, frame = video.read()
        # 如果读到的帧数不为空,那么就继续读取,如果为空,就退出
        if frame is None:
            break
        if ret == True:
            # cv2.resizeWindow('video',width,height)
            cv2.namedWindow('video',cv2.WINDOW_NORMAL)
            cv2.imshow("video", frame)

            # 按下p键,进行拍照
            if cv2.waitKey(50) & 0xFF == ord('p'):
                print('按下p键,进行拍照')
                current_time = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
                # 保存当前帧为图片
                file_name = f"{current_time}.jpg"
                # 调用函数,创建名字为'photo'的文件夹
                path = create_directory('photo')
                photo_path = os.path.join(path, file_name)
                cv2.imwrite(photo_path, frame)

                print(f"当前帧已保存为 '{file_name}'")

            # 这里等于 27 也即是说按下 ESC 键即可退出该窗口
            # 这里使用 waitKey 可以控制视频的播放速度,数值越小,播放速度越快
            if cv2.waitKey(50) & 0xFF == 27:
                break
    video.release()
    cv2.destroyAllWindows()
python 复制代码
# usb摄像头的id为1
view_video(1)
相关推荐
m0_377618234 分钟前
HTML怎么显示速率限制重置时间_HTML X-RateLimit-Reset解析【说明】
jvm·数据库·python
keyipatience9 分钟前
7.Linux1权限-开发工具
linux
u01091476012 分钟前
C#怎么实现OAuth2.0授权_C#如何对接第三方快捷登录【核心】
jvm·数据库·python
2301_7775993716 分钟前
如何显著提升 Google Sheets 数据库批量更新脚本的执行效率
jvm·数据库·python
2201_7610405923 分钟前
bootstrap怎么给div添加自定义的边框样式
jvm·数据库·python
Java后端的Ai之路25 分钟前
当大模型开始“水土不服“:从通才到专才的进化论——Fine-tuning 企业级实战全攻略
人工智能·python·langchain·rag·lcel
weixin_5689960629 分钟前
Golang怎么用K8s Job执行一次性任务_Golang如何用Job资源运行批处理和迁移任务【操作】
jvm·数据库·python
耿雨飞31 分钟前
Python 后端开发技术博客专栏 | 第 09 篇 GIL 深度解析与并发编程实战 -- 多线程、多进程、协程的选型
开发语言·python
Ulyanov37 分钟前
像素迷宫:路径规划算法的可视化与实战
大数据·开发语言·python·算法
纤纡.37 分钟前
轻松实现多语言文字识别与实时检测:PaddleOCR 实战指南
人工智能·深度学习·opencv·paddlepaddle