根据opencv4.1官方文档学习记录
import numpy as np
import cv2 as cv
# 打开摄捕捉视频 函数参可以为设备的索引,也可以是视频文件名字
# 设备索引就是指定哪个摄像头的数字。
# 正常情况下,一个摄像头会被连接。
# 所以我简单地传0(或-1)。也可以通过传递1来选择第二个相机,
# 以此类推。在此之后,可以逐帧捕获。但是在最后,不要忘记释放俘虏。
cap = cv.VideoCapture(0)
# 检测是否捕捉成功 是返回 1
if not cap.isOpened():
print("Cannot open camera")
exit()
while True:
# cap.read()功能逐帧捕获
# cap.read()返回布尔值(True/ False)。
# 如果正确读取了帧,它将为True。因此,可以通过检查此返回值来检查视频的结尾。
# 返回两个参数 第一个是布尔值代表是否读取到帧 第二个是一帧图像
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
# 我们在框架上的操作到这里
# 赋予颜色,第一个参数是帧的名字 第二个参数是要显示的颜色
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
rgb = cv.cvtColor(frame, cv.COLOR_RGB2RGBA)
# 显示结果帧e
cv.imshow('frame', gray)
cv.imshow('frame1', rgb)
if cv.waitKey(500) == ord('q'):
break
# 完成所有操作后,释放捕获器
cap.release()
cv.destroyAllWindows()
# cap.get() 和 cap.set()
# .get()一个参数,传入你想要获取的值 。 .set()两个参数,想要修改的参数名和值
# 你还可以使用cap.get(propId)方法访问该视频的某些功能,其中propId是0到18之间的一个数字。
# 每个数字表示视频的属性(如果适用于该视频),并且可以显示完整的详细信息在这里看到:cv::VideoCapture::get()。
# 其中一些值可以使用cap.set(propId,value)进行修改。value是你想要的新值。
#
# 例如,我可以通过cap.get(cv.CAP_PROP_FRAME_WIDTH)和cap.get(cv.CAP_PROP_FRAME_HEIGHT)检查框架的宽度和高度。
# 默认情况下,它的分辨率为640x480。但我想将其修改为320x240。
# ret = cap.set(cv.CAP_PROP_FRAME_WIDTH,320) and ret = cap.set(cv.CAP_PROP_FRAME_HEIGHT,240).
cap = cv.VideoCapture('output.avi')
while cap.isOpened():
ret, frame = cap.read()
# 如果正确读取帧,ret为True
# 若为结尾则直接退出
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
cv.imshow('frame', gray)
# cv.waitKey()是等待键入的时间,视频播放是按帧播放,所以等待时间会影响视频播放速度
# 过小则视频播放很快 过大则视频播放很慢 为0则只显示一帧
if cv.waitKey(25) == ord('q'):
break
cap.release()
cv.destroyAllWindows()
cap = cv.VideoCapture(0)
# 定义编解码器并创建VideoWriter对象
fourcc = cv.VideoWriter_fourcc(*'MJPG')
# 定义保存图像的相关参数 文件路径 编解码器 帧率 图像大小
out = cv.VideoWriter('output.mp4', fourcc, 20.0, (640, 480))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
# 垂直翻转框架
# <0 沿着Y轴翻转 =0 沿着X轴翻转 >0 沿着原点翻转
frame = cv.flip(frame, 1)
# 写翻转的框架
out.write(frame)
cv.imshow('frame', frame)
if cv.waitKey(1) == ord('q'):
break
# 完成工作后释放所有内容
cap.release()
out.release()
cv.destroyAllWindows()
评论(0)
您还未登录,请登录后发表或查看评论