python调用手机摄像头,并保存视频

本文介绍如何使用Python调用手机摄像头并通过IP摄像头APP捕获视频流,实现视频的实时显示及保存为MP4格式。代码示例中详细展示了设置视频编码、帧率、分辨率及视频写入的过程。
部署运行你感兴趣的模型镜像

python调用手机摄像头,并保存视频

说明:手机端安装IP摄像头APP,并开启

代码如下:

# -*- coding: utf-8 -*-
"""
Created on Thu Apr 16 20:44:52 2020
@author: 指尖魔法师
功能:python调用手机摄像头,并保存视频

说明:
手机需要安装IP摄像头app
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
"""
import cv2
import time

video ='http://admin:admin@weileiteki-iphone.local:8081'
capture = cv2.VideoCapture(video)

if capture.isOpened():
    cv2.namedWindow('camera',cv2.WINDOW_NORMAL)
    
#    保存avi视频    
#    fourcc = cv2.VideoWriter_fourcc(*'XVID')
#    # fps = cap.get(cv2.CAP_PROP_FPS)
#    size = (int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
#    out = cv2.VideoWriter('camera_test.avi', fourcc,10.0, size)

#    保存MP4视频     
    fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
    fps = 30
    size = (int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
    out = cv2.VideoWriter()
    out.open('output.mp4',fourcc,fps,size,True)

    while capture.isOpened():
        ret,frame = capture.read()
        if ret:
#            #设定了灰值后无法保存视频
#            frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
            cv2.imshow('camera',frame)
            
            out.write(frame)
            
            #按空格保存图像,按esc退出
            key = cv2.waitKey(10) 
            if key == 27:
                break
            
            if key == ord(' '):
                photoname=str(int(time.time()))+'.jpg'
                cv2.imwrite(photoname,frame)
        else:
            break;
    
    
    
    capture.release()
    out.release()
    cv2.destroyAllWindows()

电脑运行效果:

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,我现在需要帮助用户解决如何使用PythonOpenCV调用摄像头拍摄视频保存到指定路径的问题。用户已经提供了三个相关的引用内容,我需要仔细分析这些引用,找出有用的信息,整合成一个清晰的回答。 首先,引用[1]和引用[2]都提到了使用OpenCV的VideoCapture来捕获摄像头视频流,展示了如何读取帧和显示画面。引用[3]则提到了截图保存的功能,但用户需要的是保存视频,而不是图片。不过,这些引用中的代码示例可以作为基础。 接下来,我需要回忆OpenCV保存视频的方法。通常,保存视频需要使用VideoWriter对象,需要指定编码器、帧率、分辨率等参数。用户需要将视频保存到指定路径,所以在代码中需要设置输出文件的路径,确保格式正确,比如.avi或.mp4。 然后,我需要检查用户提供的引用中是否有VideoWriter的使用。在引用[1]和[2]中,主要涉及读取和显示帧,但没有保存视频的部分。引用[3]提到了截图保存,但那是静态图片。因此,我需要补充VideoWriter的用法,这可能不在用户提供的引用中,需要依靠自己的知识。 接下来,构建代码结构。首先,使用cv2.VideoCapture(0)打开摄像头,检查是否成功。然后,设置VideoWriter的参数,比如FourCC编码器、帧率、帧大小。需要注意的是,帧大小必须与摄像头捕获的一致,否则可能导致写入失败。因此,可能需要从摄像头获取帧的尺寸,或者在设置VideoWriter之前调整帧的大小。 此外,用户可能需要选择适当的视频格式和编码器。例如,使用MJPG编码器和.avi格式,或者使用MP4V编码器和.mp4格式。不同的操作系统和编解码器支持可能不同,需要提醒用户注意这一点。 在循环中,不断读取帧,写入VideoWriter对象,显示实时画面。当用户按下特定键(如'q')时退出循环,释放资源。需要确保在退出后正确释放摄像头和VideoWriter对象,避免资源泄漏。 还要考虑可能的错误处理,例如摄像头无法打开、无法读取帧等情况,给出相应的提示信息。此外,保存路径可能需要用户自行修改,确保路径存在且有写入权限。 最后,生成相关问题,帮助用户扩展知识,比如如何调整视频参数、解决保存失败的问题、添加时间戳或处理视频流等。 现在,将这些思考整合成一个步骤清晰的回答,确保代码正确,符合用户的需求。</think>以下是使用PythonOpenCV调用摄像头拍摄视频保存到指定路径的完整实现方法,包含详细的代码注释和参数说明: ### 一、视频拍摄与保存实现步骤 1. **导入OpenCV库**:`import cv2` 2. **创建视频捕获对象**:`cv2.VideoCapture(0)` 参数0表示默认摄像头 3. **配置视频保存参数**: - 使用`cv2.VideoWriter_fourcc()`设置视频编码格式 - 指定输出路径、帧率、分辨率 4. **创建视频写入对象**:`cv2.VideoWriter()` 5. **实时捕获与写入循环**:持续读取摄像头帧数据写入视频文件 6. **释放资源**:退出时关闭摄像头和写入对象 ```python import cv2 # 创建VideoCapture对象(0表示默认摄像头) cap = cv2.VideoCapture(0) # 检查摄像头是否成功打开 if not cap.isOpened(): print("无法打开摄像头") exit() # 设置视频参数(从摄像头获取默认分辨率) frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) fps = 30 # 建议设置为摄像头实际帧率 # 定义视频编码器(常见组合参考下文说明) fourcc = cv2.VideoWriter_fourcc(*'XVID') # AVI格式推荐 # fourcc = cv2.VideoWriter_fourcc(*'mp4v') # MP4格式推荐 # 创建VideoWriter对象(参数:输出路径,编码器,帧率,分辨率) output_path = './output_video.avi' # 保存路径可修改 out = cv2.VideoWriter(output_path, fourcc, fps, (frame_width, frame_height)) while True: # 逐帧捕获视频 ret, frame = cap.read() if not ret: print("无法获取视频帧") break # 写入视频文件 out.write(frame) # 显示实时画面 cv2.imshow('Camera', frame) # 按Q键停止录制 if cv2.waitKey(1) == ord('q'): break # 释放资源 cap.release() out.release() cv2.destroyAllWindows() print(f"视频保存至:{output_path}") ``` ### 二、关键参数说明 1. **编码器选择**: - `XVID`:适用于AVI格式,兼容性较好 - `mp4v`:适用于MP4格式(需修改文件后缀为.mp4) - `MJPG`:高画质但文件较大 - 不同操作系统支持的编码器可能不同[^1] 2. **分辨率设置**: ```python # 可手动设置分辨率(需摄像头支持) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) ``` 3. **常见问题处理**: - **保存失败**:检查路径写入权限和磁盘空间 - **视频无法播放**:尝试更换编码器格式组合 - **帧率不同步**:通过`cap.get(cv2.CAP_PROP_FPS)`获取实际帧率 ### 三、扩展功能建议 1. **添加时间戳**:在帧画面中插入`cv2.putText()`显示录制时间 2. **多摄像头支持**:修改VideoCapture参数为不同设备ID 3. **视频压缩**:通过调整编码参数控制文件大小
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值