opencv基础: 视频,摄像头读取与保存的常用方法

当然还可以从视频中抓取截图,所以现在聊一下常用的抓取视频截图的的方法。

VideoCapture 方法

python 复制代码
 cv2.VideoCapture();
 cv2.VideoCapture( device);
 cv2.VideoCapture(filename);

上面有三种构造方法,

  • 第一种是无法构造方法。

  • 第二种参数device是一个数字。

    一般笔记本如此写cv2.VideoCapture(0); 因为默认是0 ,如果有多个摄像头,就需要看设置的摄像头代表的数字了。

  • 第二种参数device是一个字符串。

    其代表是从视频文件种得到帧。

release 方法

释放资源的方法:

python 复制代码
cap = cv2.VideoCapture();
cap.release()

read 方法

read方法就是读取视频的帧的方法。

python 复制代码
cap = cv2.VideoCapture();
cap.read()
  • read() 方法返回的有两个值
    • 第一个值:为状态值,读到帧就是true
    • 第二个值:返回的视频帧,通俗的说就是图片

来一个例子:

python 复制代码
import  cv2
Cap = cv2.VideoCapture("1.mp4");
flag,phto= Cap.read();

cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
# cv2.resizeWindow("Wind", 1920, 1080)
cv2.imshow("Wind",phto)

key=cv2.waitKey(0)

if key=="q":
    cv2.destroyWindow()
Cap.release()

但是如果观察效果的话,会发现这是窗口只有镜头内容。

所以需要用一个while循环

python 复制代码
import  cv2
Cap = cv2.VideoCapture("1.mp4");
cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
# cv2.resizeWindow("Wind", 1920, 1080)
while True:
    flag, phto = Cap.read();
    if flag:
        cv2.imshow("Wind",phto)
        key=cv2.waitKey(1)
        if(key & 0xFF == ord('q')):
             break
    else:
        break
Cap.release()
#释放VideoWriter
Cap.release()
cv2.destroyAllWindows()

isOpened方法

这个方法是判断摄像头和文件是发可以正常打开,返回True 或 False:

python 复制代码
# Cap = cv2.VideoCapture(1);
Cap = cv2.VideoCapture("1.mp4");
# 可以使用判断是否摄像头打开 作为标识符值
Cap.isOpened() 

可以读取文件的方法修改为:

python 复制代码
import  cv2
# 如果是通过摄像头的话
# Cap = cv2.VideoCapture(1);
Cap = cv2.VideoCapture("1.mp4");
cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
# cv2.resizeWindow("Wind", 1920, 1080)
# Cap.isOpened():  可以使用判断是否摄像头打开  以及文件是否可以正常打开
while Cap.isOpened():
    flag, phto = Cap.read();
    if flag:
        cv2.imshow("Wind",phto)
        # cv2.resizeWindow("Wind", 1920, 1080)
        key=cv2.waitKey(1)
        if(key & 0xFF == ord('q')):
             break
    else:
        break
Cap.release()
#释放VideoWriter
Cap.release()
cv2.destroyAllWindows()

补充

这里补充一点 如果再循环外:

python 复制代码
cv2.resizeWindow("Wind", 1920, 1080)

只会在循环种呈现一次,如果真的需要,那就行说在循环体内再写一遍。

VideoWriter方法

有时候,打开摄像头等,需要将内容保存到本地,所以就需要这个方法:

如下:

python 复制代码
cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)
  1. filename(必选):要写入的视频文件的名称。

  2. fourcc(必选):用于指定视频编解码器的4个字符代码。例如,'MJPG'表示Motion JPEG编码。

    python 复制代码
    fourcc = cv2.VideoWriter_fourcc(*'MJPG')
  3. fps(必选):视频的帧率,以每秒帧数(FPS)为单位。

  4. frameSize(必选):视频帧的大小,以像素为单位。

  5. isColor(可选):一个布尔值,指示是否使用彩色。如果为True,则使用彩色,否则为灰度。

python 复制代码
filename = 'tang1.avi'
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
fps = 30.0
frameSize = (640, 480)
isColor = True

# 创建VideoWriter对象
out = cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)

不过这个等于创建了个对象,还需要进入写入,所以需要在用如下方法:

python 复制代码
#frame = cv2.imread('frame.jpg') 或者是视频  flag, frame = Cap.read();
out.write(frame)

结合如下写:

python 复制代码
import  cv2
# 如果是通过摄像头的话
# Cap = cv2.VideoCapture(1);
Cap = cv2.VideoCapture("1.mp4");
cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
filename = 'tang1.avi'
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
fps = 30.0
frameSize = (640, 480)
isColor = True

# 创建VideoWriter对象
out = cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)
# cv2.resizeWindow("Wind", 1920, 1080)
# Cap.isOpened():  可以使用判断是否摄像头打开  以及文件是否可以正常打开
while Cap.isOpened():
    flag, frame = Cap.read();
    if flag:
        cv2.imshow("Wind",phto)
        out.write(frame)
        # cv2.resizeWindow("Wind", 1920, 1080)
        key=cv2.waitKey(1)
        if(key & 0xFF == ord('q')):
             break
    else:
        break
Cap.release()
#释放VideoWriter
Cap.release()
cv2.destroyAllWindows()
相关推荐
跃跃欲试-迪之几秒前
animatediff 模型网盘分享
人工智能·stable diffusion
Captain823Jack27 分钟前
nlp新词发现——浅析 TF·IDF
人工智能·python·深度学习·神经网络·算法·自然语言处理
被制作时长两年半的个人练习生27 分钟前
【AscendC】ReduceSum中指定workLocal大小时如何计算
人工智能·算子开发·ascendc
Captain823Jack1 小时前
w04_nlp大模型训练·中文分词
人工智能·python·深度学习·神经网络·算法·自然语言处理·中文分词
Black_mario1 小时前
链原生 Web3 AI 网络 Chainbase 推出 AVS 主网, 拓展 EigenLayer AVS 应用场景
网络·人工智能·web3
Aileen_0v02 小时前
【AI驱动的数据结构:包装类的艺术与科学】
linux·数据结构·人工智能·笔记·网络协议·tcp/ip·whisper
数信云 DCloud2 小时前
实力认可 | 通付盾入选《ISC.AI 2024创新能力全景图谱》五项领域
人工智能
itwangyang5202 小时前
AIDD - 从机器学习到深度学习:蛋白质-配体对接评分函数的进展
人工智能·深度学习·机器学习
jerry2011082 小时前
机器学习常用术语
人工智能·机器学习
电报号dapp1192 小时前
比特币市场震荡:回调背后的机遇与挑战
人工智能·去中心化·区块链·智能合约