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()#关闭所有视频图像接口