摘要:cap=cv2.VideoCapture(0)。cap=cv2.VideoCapture(0)。

我们经常使用摄像头捕获实时图像。OpenCV提供了一个 常简单的接口。我们使用摄像头来捕获一段并把它换成灰度显示出来。

我们应该使用方法VideoCapture(参数),这个参数是我们计算机上摄像头的索引号,从0开始,一般笔记本都有内置摄像头,如果不想用内置的可以设置成1,或者2等等,一般我们使用其它的设置成0

这个方法可以返回一个VideoCapture对象,我们可以通过该对象的方法来读取视频

方法讲解

cap.isOpened()来检查是摄像头否成功初始化了。如果回值是True就没有。否则就使用函数cap.open()。如果没有初始化成功执行其它代码会出错

cap.read() 返回一个布尔值True/False。如果帧取的是正确的就是True。所以可以检查通过它的返回值来查看文件是否已经到了结尾。

cap.get(propId) 来获得的一些参数信息。 propId 可以是 0 到 18 之的任何整数。每一个数代表一个属性比如

cap.get(3)和cap.get(4)来查看每一帧的宽和,默认情况下得到的值是640X480。

但是我可以使用 cap.set(propId,value) 来修改比如:

ret=cap.set(3,320) 和 ret=cap.set(4,240) 来把宽和改成 320X240

代码演示

机器学习opencv之读视频文件,显示视频文件以及如何保存视频文件

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)把frame图片灰色处理

# -*- coding: utf-8 -*-

import numpy as np

import cv2

cap=cv2.VideoCapture(0)

while True:

ret, frame = cap.read()

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

cv2.imshow('frame', gray)

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

break

cap.release()

cv2.destroyAllWindows()

解释cap.read会返回两个参数:所以必须ret,frame这样写

第一个参数ret的值为True或False,代表有没有读到图片

第二个参数是frame,是当前截取一帧的图片。

cv2.cvtColor(frame,参数)为设置这个窗口的颜色

cap.release()为释放摄像头

这个整个程序的运行流程是这样的,摄像头获取的视频在我们其实就是由一帧一帧的图片构成,我们cap.read读取每一帧,然后显示,这样一直读取一直显示,就完成了显示视频的作用了

将读取到的视频存储到文件中

机器学习opencv之读视频文件,显示视频文件以及如何保存视频文件

# -*- coding: utf-8 -*-

import numpy as np

import cv2

cap=cv2.VideoCapture(0)

fourcc = cv2.VideoWriter_fourcc('M','J','P','G')

frame_width = int(cap.get(3))

frame_height = int(cap.get(4))

out = cv2.VideoWriter('output.avi', fourcc, 10.0, (frame_width, frame_height))

while (cap.isOpened()):

ret, frame = cap.read()

if ret == True:

#frame = cv2.flip(frame, 0)

out.write(frame)

cv2.imshow('frame', frame)

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

break

else:

break

cap.release()

out.release()

cv2.destroyAllWindows()

代码解析

cv2.VideoWriter_fourcc('M','J','P','G')为获取FourCC,它是一个一种独立标识视频数据流格式的四字符代码,视频播放软件通过查询 FourCC 代码并且寻找与 FourCC 代码相关联的视频解码器来播放特定的视频流。常见的FourCC码有:DIVX,XVID,MJPG,X264,WMV1,WMV2,比如:fourcc = cv2.VideoWriter_fourcc(*'XVID'),在本机xvid无法成功,而mjpg成功,mjpg是最保险的一个

我们将读取的一张图片写入只需要imwrite,而写入视频需要费事一些,他需要VideoWriter对象,这个对象创建的时候需要四个参数:

第一个:指定输出文件的格式及名称(例如:output.avi,这个不固定)

第二个:FourCC码

第三个:每秒帧数(FPS)

第四个:应该传递帧的大小

获取对象out最后可以write(窗口),这样就将视频写到了文件中了

frame = cv2.flip(frame, 0)被注释了,这方法的意思是对帧进行翻转,就是说摄像头录的视频相当于是上下反的

out.write(frame)

cv2.imshow('frame', frame)

一边写入,一边显示,让我们看清摄像头究竟在录什么

相关文章