python_获取网络(大华)摄像头画面,并存储为图片和视频

这篇具有很好参考价值的文章主要介绍了python_获取网络(大华)摄像头画面,并存储为图片和视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

导入库

pip install opencv-python

代码

  • 网络摄像头
'''
Opencv-python读取IP摄像头视频流
pip install opencv-python
'''

import cv2
import datetime
import time


class Camera_picture:

    def __init__(self):

        # 摄像头登录账号
        self.user = "admin"

        # 摄像头登录密码
        self.pwd = "123456"

        # 摄像头地址:端口
        self.ip = "192.168.100.108:554"

        # 截图存储位置
        self.file_path = "./"

        # 摄像头窗口名称
        self.name = "camera"

    # 连接并获取大华摄像头数据
    def dahua(self):
        # channel:通道号,起始为1。例如通道2,则为channel=2
        # subtype:码流类型,主码流为0(即subtype=0),辅码流为1(即subtype=1)。
        video_stream_path = f"rtsp://{self.user}:{self.pwd}@{self.ip}/cam/realmonitor?channel=1&subtype=0"
        cap = cv2.VideoCapture(video_stream_path)  # 连接摄像头

        # cap.isOpened() 判断摄像头是否连接成功,如果返回True则代表连接成功可以继续操作,如果返回False则代表连接失败
        print('IP摄像头是否开启: {}'.format(cap.isOpened()))

        return cap

    def timing_screenshot(self):
        '''定时截图'''
        cap = self.dahua()
        if cap.isOpened():  # 连接成功
            cv2.namedWindow(self.name, flags=cv2.WINDOW_FREERATIO)  # 创建一个用于显示画面的窗口
            last_time = datetime.datetime.now()  # 记录上一次时间
            while(True):
                # 逐帧捕获,第一个参数返回一个布尔值(True/False),代表有没有读取到图片;第二个参数表示截取到一帧的图片
                ret, frame = cap.read()
                frame = cv2.resize(frame, (500, 300))  # 调整画面大小
                cv2.imshow(self.name, frame)  # 显示摄像头画面

                # 定时获取截图
                cur_time = datetime.datetime.now()  # 当前时间
                name = self.file_path + str(time.time()) + ".jpg"  # 路径+名称+格式
                if (cur_time - last_time).seconds >= 10:  # 如果间隔超过10秒就截图
                    cv2.imwrite(name, cap.read()[1])  # 保存摄像头画面
                    last_time = cur_time
                    print("画面保存成功")

                if cv2.waitKey(1) & 0xFF == ord('q'):
                    break

            # 当一切结束后,释放VideoCapture对象
            cap.release()  # 释放摄像头
            cv2.destroyAllWindows()  # 释放所有显示图像窗口
        else:
            print("摄像头连接失败,请检查配置")

    def manual_screenshot(self):
        '''手动截图'''
        cap = self.dahua()
        if cap.isOpened():
            cv2.namedWindow(self.name, flags=cv2.WINDOW_FREERATIO)
            while(True):
                ret, frame = cap.read()
                frame = cv2.resize(frame, (500, 300))
                cv2.imshow(self.name, frame)

                event = cv2.waitKey(1) & 0xFF  # 使用变量

                if event == ord('s'):  # 按"S"截取图片
                    name = self.file_path + str(time.time()) + ".jpg"
                    cv2.imwrite(name, cap.read()[1])
                    print("画面保存成功")

                elif event == ord('q'):
                    break

            cap.release()
            cv2.destroyAllWindows()
        else:
            print("摄像头连接失败,请检查配置")

    def get_video_stream(self):
        '''获取视频流'''
        cap = self.dahua()
        if cap.isOpened():  # 连接成功
            width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  # 获取视频的宽度
            height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 获取视频的高度
            fps = cap.get(cv2.CAP_PROP_FPS)  # 获取视频的帧率
            # fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))  # 视频的编码

            # FourCC 是用于指定视频编解码器的4字节代码
            fourcc = cv2.VideoWriter_fourcc(*"MJPG")
            writer = cv2.VideoWriter(f"{self.file_path}{str(time.time())}.mp4", fourcc, fps, (width, height))

            while(True):
                ret, frame = cap.read()

                if not ret:  # 返回False退出循环
                    break

                writer.write(frame)  # 视频保存

                frame = cv2.resize(frame, (500, 300))
                cv2.imshow(self.name, frame)

                if cv2.waitKey(1) & 0xFF == ord('q'):
                    break

            cap.release()
            cv2.destroyAllWindows()
        else:
            print("摄像头连接失败,请检查配置")


if __name__ == '__main__':
    run = Camera_picture()
    # run.timing_screenshot()
    run.get_video_stream()
    # run.manual_screenshot()

  • USB摄像头
'''
Opencv-python读取USB摄像头视频流
pip install opencv-python
'''

import cv2


def usb_camera():
    '''usb摄像头连接'''
    cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)  # 连接摄像头

    if cap.isOpened():  # 连接成功
        while(True):
            ret, frame = cap.read()
            # frame = cv2.flip(frame, 1)  # 摄像头是和人对立的,将图像左右调换回来正常显示
            cv2.imshow("Usb Capture", frame)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break

        cap.release()
        cv2.destroyAllWindows()

    else:
        print("摄像头连接失败,请检查摄像头连接是否正常")


if __name__ == '__main__':
    usb_camera()

文章来源地址https://www.toymoban.com/news/detail-527740.html

到了这里,关于python_获取网络(大华)摄像头画面,并存储为图片和视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大华SDK+JAVA+4g网络摄像头进行二次开发

    监控,相信大家都不陌生。现在的监控技术发展迅速,国内以海康威视为首的智能视频监控提供商也层出不穷。现在,这些提供商都已经提供了相应的SDK以及API接口,能够很好的支撑我们进行摄像机的二次开发工作。相信大家都有接触过这么一个需求:利用手机可以自己进行

    2024年01月20日
    浏览(49)
  • 在Orangepi5开发板3588s使用opencv获取摄像头画面

    先感谢香橙派群的管理员耐心指导,经过不断的调试修改最后成功通过opencv调用mipi摄像头获取画面 就记录分享一下大概步骤希望大家少踩点坑!!!!!! 我用的固件系统是 ubuntu2022.0.4 固件是: Orangepi5_1.1.6_ubuntu_jammy_desktop_gnome_linux5 .10.110.img 想通过opencv获取画面得先安装

    2024年02月12日
    浏览(55)
  • 消除Python OpenCV显示摄像头画面的延迟

    用 Python 通过 OpenCV显示摄像头画面时,如果对视频帧进行一些处理,常常会遇到一个问题,显示的画面比眼睛看到真实场景慢几秒甚至更多,给用户的体验不好。 画面延迟与卡顿的区别 卡顿 是指视频播放时,出现一顿一顿的现象,不流畅,通常每秒播放速率少于10帧就可以

    2024年02月11日
    浏览(53)
  • 解决OpenCV使用USB摄像头获取高分辨率视频低帧率、卡、果冻画面的问题

    最近制作移动设备,需要安置多个usb摄像头到电脑,踩了几个坑,记录一下解决方案。 不能使用分线器插多个usb摄像头,同一时间只能加载一个。 usb摄像头调高分辨率时,非常卡顿,视频画面像果冻一样,及不流畅 第二个情况具体描述: 摄像头支持1920*1080  60fps,opencv在

    2024年02月16日
    浏览(87)
  • 大华摄像头有问题,海康摄像头也有问题

    买了个大华摄像头,除了抗噪方面效果不好,我是很满意的。前一段时间摄像头启动出了点问题(忘记拔掉SD卡),于是买了个海康的。 大华摄像头是3寸,海康是2寸。视频效果差多了。看来大有大的道理。 更可恨的是,萤石云不支持这个摄像头(说是要插录像机)。买的时

    2024年02月11日
    浏览(47)
  • unity海康威视原生SDK拉取网络摄像头画面,并展示在一个Material上

    untiy版本是2019.4,低版本会有问题,速度比UMP插件快得多 原理是使用sdk获取视频流,格式为YUV,然后分离YUV通道到三张不同的Texture2D上,通过shader将三个通道重新输出为原始图像。 我将所用的各个部分已经整理成一个压缩包,免积分下载 压缩包结构如下 使用步骤 1 DLL:放在

    2024年02月13日
    浏览(44)
  • Java对接大华摄像头SDK

    大华SDK下载地址:https://support.dahuatech.com/tools/sdkExploit 开发操作系统:Windows10-64位 服务器操作系统:linux 64位 sdk版本:设备网络SDK_JAVA_Linux64_V3.055.0000000.1.R.221027 我下载的是JAVA-win64和JAVA_Linux64版本(如果是用linux开发可以只下载linux版本,因为我本地是Windows,运行时有些包需要

    2024年02月16日
    浏览(44)
  • web接入大华摄像头实时视频

    目录 一、FFmpeg下载及配置​​​​ 二、nginx下载及配置 三、摄像rtsp取流 四、ffmpeg推流 五、html前端工作 地址:Download FFmpeg    下载并解压FFmpeg文件夹,配置环境变量:在“Path”变量原有变量值内容上加上d:ffmpegbin,验证:ffmpeg -version 出现版本号则成功。 这个我之前有,

    2023年04月20日
    浏览(65)
  • 大华摄像头windows、linuxJavaSDK开发使用

    本文档主要介绍 SDK 接口参考信息,包括主要功能、接口函数和回调函数。 主要功能包括:SDK 初始化、设备登录、实时预览、云台控制、语音对讲、报警监听、智能订阅、 录像回放和录像下载等。 根据环境不同,开发包包含的文件会不同,具体如下所示。 Windows 开发包所包

    2024年01月20日
    浏览(51)
  • 海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储

    文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/131679108 上一篇:没有了 下一篇:敬请期待…   Hik防爆摄像头录像,因为防爆摄像头会有对应的APP软件,与普通的网络摄像头和球机不一样,默认认为它不可以通过web网页配置,所以弄

    2024年02月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包