局域网内简单读取ip摄像头内容并保存至本地与按时间间隔提取本地视频的图片帧

1、同一局域网内读取ip摄像头内容

      可以用手机在应用商店下载APP ip摄像头,并取消掉用户名和密码(为方便实现),然后打开IP摄像头服务器,运行以下代码,即可实现实时读取ip摄像头内容,并将其实时内容保存到本地,最初发现Ip摄像头功能正常,但保存到本地的视频只有6KB,发现是视频文件的大小出现了问题,当把大小改为(640,480)后可以解决该问题。

海康相机的Ip摄像头,用opencv拉同一个相机的rtsp流,最多有6路,再拉旧不行了。可能不同品牌,限制不同。总之有限制

 

import cv2
FPS=24.0#帧数
WIDTH=640
HEIGHT=480

cv2.namedWindow("webcam test")
cam_url = 'http://192.168.*.*:8081/video'
cap = cv2.VideoCapture(cam_url)
filename='ip_video.avi'
fourcc=cv2.VideoWriter_fourcc(*'XVID')#建议使用XVID编码,图像质量和文件大小都兼顾的方案
out=cv2.VideoWriter(filename,fourcc,FPS,(WIDTH,HEIGHT))

if cap.isOpened():
    rval, frame = cap.read()
else:
    cap.open(cam_url)
    rval = False

while rval:
    out.write(frame)
    cv2.imshow("webcam test", frame)
    rval, frame = cap.read()
    key = cv2.waitKey(1)
    if key == 27:  # exit on ESC
        break
cap.release()
cv2.destroyAllWindows()

2、提取本地视频的图片帧

实时:视频图像采集(opencv)
import cv2
cap=cv2.VideoCapture("D:\pycharm\ip_video.avi")#VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径
#则打开视频
c=1
frameRate=100#帧数截取间隔(每隔100帧截取一帧)
while(True):
    ret,frame=cap.read()#cap.read()按帧读取视频,ret,frame是cap.read()方案的两个返回值,ret为布尔值,如果读取帧是正确则为TRUE
    #frame就是每一帧的图像,是一个三维矩阵
    if ret:
        if (c% frameRate==0):#每隔100帧截取一帧
            print("开始截取视频:"+str(c)+"帧")
            cv2.imwrite("D:\pycharm\capture_image/"+str(c)+'.jpg',frame)#将截取到的图像保存到本地
        c+=1
        cv2.waitKey(0)#参数为0,只显示当前帧图像,相当于视频暂停,参数为1,表示延迟1ms切换到下一帧图像
    else:
        print("所有帧都已经保存完成")
        break;
cap.release()#释放视频,调用
cv2.destroyAllWindows()#关闭所有视频图像接口

 

    原文作者:qq_41916589
    原文地址: https://blog.csdn.net/qq_41916589/article/details/106967141
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞