python 人工智能 学习笔记

mac2024-01-25  35

Opencv视频函数作用 图像读取与保存 cv2.imread() #读入图像 cv2.imshow() 显示图像 cv2.imwrite() 保存一个图像

视频读取与保存 cap=cv2.VideoCapture() #链接摄像头 cap.isOpened() #是否初始化摄像头成功 cap.read() #是否能够读到摄像头的图像 cap.get(propId) 来获得视频的一些参数信息。这里propId 可以是 0 到 18 之间的任何整数。每一个数代表视频的一个属性,我可以使用 cap.get(3) 和 cap.get(4) 来查看每一帧的宽和高。默认情况下得到的值是 640X480。但是我可以使用 ret=cap.set(3,320)和 ret=cap.set(4,240) 来把宽和高改成 320X240。 cv2.VideoWrite() #保存摄像头数据 • filename:需要生成的视频的名字 • fourcc:用于压缩框架的解码器的4位编码 • fps:每秒的视频帧数(framrate persecond) • frameSize:视频画面的尺寸(这里需要与用于合成视频的图片尺寸一致) • isColor:如果该位值为Ture,解码器会进行颜色框架的解码,否则会使用灰度进行颜色架构(该功能仅支持在Windows系统中使用) VideoWriter()的返回的是一个VideoWrtier类型的对象。可以继承的函数有: 将视频转化为视频帧 OpenCV 本身是有 C/C++ 编写的,如果要在其他语言中使用,我们可以通过对其动态链接库文件进行包装即可,幸运的是, Python 下有很多个这样的包装,本文中使用的是 Cvtypes 。 事实上,在 Python 中很多的包都是来自第三方的,比如 PIL(Python Image Library) 即为 C 语言实现的一个图形处理包,被包装到了 Python 中,这些包装可以让你像使用 Python 的内建函数一样的使用这些 API 。 使用python编程:用opencv按一定间隔截取视频帧,并保存为图片。 import cv2

vc = cv2.VideoCapture(‘Test.avi’) #读入视频文件 c=1

if vc.isOpened(): #判断是否正常打开 rval , frame = vc.read() else: rval = False

timeF = 1000 #视频帧计数间隔频率

while rval: #循环读取视频帧 rval, frame = vc.read() if(c%timeF == 0): #每隔timeF帧进行存储操作 cv2.imwrite(‘image/’+str© + ‘.jpg’,frame) #存储为图像 c = c + 1 cv2.waitKey(1) vc.release() 截取视频段 在原视频中截取某一段的视频并保存,有了OpenCV工具之后,就不需要用到什么视频软件了) import cv2 print(cv2.version) videoCapture = cv2.VideoCapture(‘IMG_2789.MOV’)

fps = 120 #保存视频的帧率 size = (1920,1080) #保存视频的大小

videoWriter =cv2.VideoWriter(‘video4.avi’,cv2.VideoWriter_fourcc(‘X’,‘V’,‘I’,‘D’),fps,size) i = 0

while True: success,frame = videoCapture.read() if success: i += 1 print('i = ',i) if(i>=3930 and i <= 5250): videoWriter.write(frame) else: print(‘end’) break 将场长视频截取为短视频

import cv2 import os

先导入openCV

将一个长的视频缩短,按照比例缩短,只保存其中的一部分

如下面代码就是将一个长视频每20秒取5秒,合并成一个短视频

cap = cv2.VideoCapture(‘myvideo.avi’) if not cap.isOpened(): print(‘video is not opened’) else: # 每秒25帧 num = 0 # 取5秒 needTime = 125 # 每20秒 timeSpace = 500 # 获取视频帧率 fps = cap.get(cv2.CAP_PROP_FPS) # AVI格式编码输出XVID videoWriter = cv2.VideoWriter(‘result//resultVideo_2.avi’,cv2.VideoWriter_fourcc(‘X’,‘V’,‘I’,‘D’),fps,frameSize=(320,288)) while(1): success,frame = cap.read() if (num%timeSpace <= needTime): videoWriter.write(frame) print(‘write’+ str(num)) num = num + 1 if not success: print(‘finished’) break if cv2.waitKey(100) & 0xFF == ord(‘q’): break cap.release() 将图片转化为视频 import os import cv2 import numpy as np

path = ‘需要调用的图片路径 例如:C:/picture/’ filelist = os.listdir(path)

fps = 24 #视频每秒24帧 size = (640, 480) #需要转为视频的图片的尺寸 #可以使用cv2.resize()进行修改

video = cv2.VideoWriter(“VideoTest1.avi”, cv2.VideoWriter_fourcc(‘I’, ‘4’, ‘2’, ‘0’), fps, size) #视频保存在当前目录下

for item in filelist: if item.endswith(’.png’): #找到路径中所有后缀名为.png的文件,可以更换为.jpg或其它 item = path + item img = cv2.imread(item) video.write(img)

video.release() cv2.destroyAllWindows()

视频处理 在之前介绍了OpenCV图像的输入输出以及相关操作,其实视频处理也是同样的方法。 把视频看成是一帧帧静态影像,那么之前所有的图像处理的操作便能移植到视频上来了。 首先介绍OpenCV中视频的输入及输出操作。 视频输入 视频输入有两种模式,一种是读取现有的视频文件,另一种是通过摄像头实时获取视频。 在OpenCV中,这两种模式用一个VideoCapture类就可以全部搞定,唯一的区别是构造函数的参数不同。 摄像头捕获视频 要获取视频,需要调用VideoCapture类,其构造参数是设备的索引号,也即指定需要用哪个 摄像头捕获视频。这点类似于Android编程获取相机号来指定是前置相机还是后置相机。一般 笔记本都有内置摄像头,所以参数可以设置成0。当然如果有多个摄像头可以通过设置成1或其它 来选择别的摄像头。。

coding=utf-8

import cv2

新建一个VideoCapture对象,指定第0个相机进行视频捕获

cap = cv2.VideoCapture(0)

一直循环捕获,直到手动退出

while 1: # 返回两个值,ret表示读取是否成功,frame为读取的帧内容 ret, frame = cap.read() # 判断传入的帧是否为空,为空则退出 if frame is None: break else: # 调用OpenCV图像显示函数显示每一帧 cv2.imshow(“video”, frame) # 用于进行退出条件的判断,这里与0xFF进行了与运算,取输入的低八位 k = cv2.waitKey(1) & 0xFF # 27是ESC键,表示如果按ESC键则退出 if k == 27: break

释放VideoCapture对象

cap.release()

最新回复(0)