赞
踩
一、手机端下载软件
至于怎么下载??
直接去浏览器搜索,并找到对应的下面的这个即可,也可以用我提供的这个链接去下载
IP Camera摄像头app下载-IP Camera无线摄像头app下载 v28.7.3手机客户端 - 多多软件站
二、勾选RTSP服务器,然后记下这里的局域网地址,后续会用到
三、在代码中调用即可
值得注意的是,把那个source变成自己的摄像头的地址即可,把下面完整的代码拷贝运行就可以啦,快去试试吧
- import cv2
-
- # 替换本地摄像头为网络摄像头地址
- source = 'http://admin:admin@10.33.10.220:8081'
- cap = cv2.VideoCapture(source)
-
- 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 = cap.get(cv2.CAP_PROP_FPS)
- if fps == 0:
- fps = 30
-
-
- # *mp4v 就是解包操作, 等同于 'm' 'p' '4' 'v'
- fourcc = cv2.VideoWriter_fourcc(*'XVID')
- # avi格式的视频,下面保存视频的时候后缀名要是avi
- # fourcc = cv2.VideoWriter_fourcc(*'XVID')
- # 检查视频捕捉是否成功打开
-
- print(frame_width, frame_height, fps, fourcc)
- # 参数二: 用哪种编码
- # 参数三: 帧率
- # 参数四: 分辨率, 表示摄像头拍视频, 这个大小搞错了也不行,很重要,要搞清楚自己摄像头的分辨率
- vw = cv2.VideoWriter('output.avi', fourcc, fps, (frame_width, frame_height))
- # vw = cv2.VideoWriter('output.avi', fourcc, 30, (640, 480))
-
- frame_count = 0
- max_frames = int(fps * 100000) # 10秒视频的帧数,假设帧率是30
-
- while cap.isOpened() and frame_count < max_frames:
- ret, frame = cap.read()
-
- if not ret:
- break
-
- # 写每一帧数据
- # vw.write(frame)
-
- # 增加帧计数
- frame_count += 1
-
- # 注释掉显示部分的代码
- cv2.imshow('frame', frame)
-
- if cv2.waitKey(1) == ord('q'):
- break
-
- print('done')
-
- vw.release()
- cap.release()
- cv2.destroyAllWindows()

四、也可以用多个摄像头
这个streams.txt 每个视频源单独成行
本地摄像头填0
USB摄像头填1,2,3…
IP摄像头要根据摄像头类型,按下面格式填写
- rtsp://admin(账号):admin(密码)@ip:端口/(主码流,辅码流之类的
- http
代码如下:
- import cv2
- import numpy as np
-
- # 读取文件内容
- with open('streams.txt', 'r') as file:
- sources = file.read().splitlines()
-
- # 初始化捕捉对象列表和 VideoWriter 对象
- caps = []
- vws = []
- frame_widths = []
- frame_heights = []
- fps = []
- max_frames = []
-
- for i, source in enumerate(sources):
- print(source, type(source))
- if source.isdigit():
- cap = cv2.VideoCapture(int(source))
- else:
- cap = cv2.VideoCapture(source)
-
- if not cap.isOpened():
- print(f"无法打开摄像头: {source}")
- continue
-
- # 添加摄像头到列表
- caps.append(cap)
-
- # 获取摄像头参数
- frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
- frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
- frame_widths.append(frame_width)
- frame_heights.append(frame_height)
-
- current_fps = cap.get(cv2.CAP_PROP_FPS)
- if current_fps == 0:
- current_fps = 30
- fps.append(current_fps)
-
- # 创建 VideoWriter 对象
- fourcc = cv2.VideoWriter_fourcc(*'XVID')
- output_filename = f'output_{i}.avi'
- vw = cv2.VideoWriter(output_filename, fourcc, current_fps, (frame_width, frame_height))
- vws.append(vw)
-
- # 计算最大帧数(10000秒)
- max_frames.append(int(current_fps * 10000))
-
- # 主循环
- frame_counts = [0] * len(caps)
- exit_flag = False
- while not exit_flag:
- for i, cap in enumerate(caps):
- if not cap.isOpened():
- continue
-
- ret, frame = cap.read()
- if not ret:
- continue
-
- # 写每一帧数据到对应的 VideoWriter
- vws[i].write(frame)
-
- # 增加帧计数
- frame_counts[i] += 1
-
- # 注释掉显示部分的代码
- cv2.imshow(f'frame_{i}', frame)
-
- # 检查是否按下 'q' 键以退出
- if cv2.waitKey(1) == ord('q'):
- exit_flag = True
- break
-
- # 检查所有摄像头是否已达到最大帧数
- if all(frame_count >= max_frames[i] for i, frame_count in enumerate(frame_counts)):
- exit_flag = True
-
- print('done')
-
- # 释放所有捕捉对象和 VideoWriter
- for cap in caps:
- cap.release()
-
- for vw in vws:
- vw.release()
-
- cv2.destroyAllWindows()

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。