03 打开摄像头
3.0 目标
- 打开摄像头
- 播放本地视频
3.1 打开摄像头
例 3.1.1
# Turn on the camera and grayscale it
import cv2
capture = cv2.VideoCapture(0)
while(True):
# Get a frame
ret, frame = capture.read()
# Convert this frame to grayscale
gray = cv2.cv2Color(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow( frame , gray)
if cv2.waitKey(1) == ord( q ):
break
说明 3.1.1
cv2.VideoCapture() 使用摄像头
- 参数: 指摄像头编号, 第一个为 0 , 如果是笔记本就是笔记本自带摄像头, 第 2 个摄像头就是 1 , 依此类推. 如果是本地路径, 则播放本地视频, 详见下节.
capture.read() 返回两个参数
- 返回参数 1 : 如本例 ret (return value) , 它是一个布尔值, 表明当前这一帧是否获取正确.
- 返回参数 2 : 一帧.
cv2.cv2Color() 用来转换颜色
- 参数 1 : 要转换的对象
- 参数 2 : 转换类型, 本例,
cv2.COLOR_BGR2GRAY将彩色 BGR 图转成灰度图.
例 3.1.2
# Get the resolution of the capture
# propID can be written directly as a number or as an OpenCV symbol
width, height = capture.get(3), capture.get(4)
print(width, height)
# Capture at twice the original resolution
capture.set(cv2.CAP_PROP_FRAME_WIDTH, width * 2)
capture.set(cv2.CAP_PROP_FRAME_HEIGHY, height * 2)
capture.get(propID) 可以获取摄像头的一些属性, 列如捕获的分辨率, 亮度和对比度等.
- 参数 propID : 从 0~18 的数字, 代表不同的属性, 可以参考 VideoCaptureProperties .
capture.set(propID, value) 可以修改属性值
- 参数 1 : 同上
- 参数 2 : 修改属性值
TIPS: 某些摄像头设定分辨率等参数时会无效, 由于它有固定的分辨率大小支持, 一般可在摄像头的资料页中找到.
3.2 播放本地视频
例 3.2.1
# Play local video
capture = cv2.VideoCapture( demo_video.mp4 )
while(capture.isOpened()):
ret, frame = capture.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow( frame , gray)
if cv2.waitKey(30) == ord( q ):
break
把摄像头编号换成视频的路径就可以播放本地视频. cv2.waitKey() 表明暂停的时间, 值越大, 视频播放速度越慢, 反之则相反, 一般设置为 25 或 30 .
3.3 录制视频
例 3.3.1
capture = cv2.VideoCapture(0)
# Define encoding and create a VideoWriter object
fourcc = cv2.VideoWriter_fourcc(* MJPG )
outfile = cv2.VideoWriter( output.avi , fourcc, 25., (640, 480))
while(capture.isOpened()):
ret, frame = capture.read()
if ret:
outfile.write(frame) # Write file
cv2.imshow( frame , frame)
if cv2.waitKey(1) == ord( q ):
break
else:
break
cv2.VideoWriter() 保存视频
- 参数 1 : 输出的文件名
- 参数 2 : 编码方式, 如 FourCC 码.
- 参数 3 : 帧率 FPS
- 参数 4 : 要保存的分辨率大小
cv2.VideoWriter_fourcc() 用来指定视频编码方式的四字节码, 所有的编码可参考 Video Codecs . 如 MJPG 编码可以这样写: cv2.VideoWriter_fourcc(* MJPG ) 或 cv2.VideoWriter_fourcc( M , J , P , G )
3.4 小结
用 cv2.VideoCapture() 创建视频对象, 在循环中一帧帧显示图像. 参数为数字打开摄像头, 参数为本地视频路径表明播放本地视频.
3.5 练习
- 实现一个可以拖动滑块播放视频的功能.
© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END
















暂无评论内容