Python-OpenCV 读取和保存视频和解决保存失败的原因分析
一、安装OpenCV
# 打开终端输入,没有装pip的话装上pippip install opencv-contrib-python# 打开Python交互环境,打印opencv版本import cv2print(cv2.__version__)
二、读取和保存视频
# coding=utf8
import cv2
# 1、用摄像头捕获视频
# cap = cv.VideoCapture(0) # 0表示笔记本电脑的内置摄像头,1或者其他可以选择其他摄像头。
#
# while True:
# # Capture frame-by-frame
# ret, frame = cap.read()
#
# # Our operation on the frame come here
# gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) # 视频转换为灰度视频
#
# # Display the resulting frame
# cv.imshow('frame', gray)
# if cv.waitKey(0) & 0xFF == ord('q'):
# break
#
# # when everything done, release the capture
# cap.release()
# cv.destroyAllWindows()
# 2、保存视频
# 采用本地视频测试
path = "videos/ceshi.mp4"
cap = cv2.VideoCapture(path)
# 获取视频的有关参数
w = int(cap.get(3)) # 获取视频的width
h = int(cap.get(4)) # 获取视频的height
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter('videos/localvideo.avi', fourcc, 15.0, (w, h))
# 定义视频编码,创建视频输出对象
# fourcc = cv2.VideoWriter_fourcc(*'XVID') # 保存视频的编码
# 设置帧频率fps=20.0,存储的视频大小为1280*720,具体看输入视频的大小,不然会报错。
# out = cv2.VideoWriter('videos/output.mp4', fourcc, 20.0, (1280, 720))
# 等价于
# 视频的宽度 width = int(reader.get(cv2.CAP_PROP_FRAME_WIDTH))
# 视频的高度 height = int(reader.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 视频的帧率 fps = reader.get(cv2.CAP_PROP_FPS)
# 视频的编码 fourcc = int(reader.get(cv2.CAP_PROP_FOURCC))
# 定义视频输出writer = cv2.VideoWriter("videos/output.mp4", fourcc, fps, (width, height))
# while cap.isOpened():
# ret, frame = cap.read()
# if ret == True:
# frame = cv.flip(frame, 1) # 图像翻转:0 垂直翻转;1 水平翻转; -1 水平垂直翻转
#
# # write the flipped frame
# out.write(frame)
#
# cv.imshow('frame', frame)
# if cv.waitKey(1) & 0xFF == ord('q'):
# break
# else:
# break
#
# # release everything if job is finished
# cap.release()
# out.release()
# cv.destroyAllWindows()
# 3、从摄像头中获取视频
# cap = cv.VideoCapture(0)
# while True:
# ret, frame = cap.read() # 读取帧
# gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) # 灰度化展示
# cv.imshow('frame', gray)
# if cv.waitKey(1) & 0xFF == ord('q'): # 按‘q’退出
# break
#
# 释放资源并关闭窗口
# cap.release()
# cv.destroyAllWindows()
# 4、从文件中播放视频
# import cv2
# cap = cv2.VideoCapture('output.avi')
# while cap.isOpened():
# ret, frame = cap.read()
# cv2.imshow('frame', frame)
# if cv2.waitKey(25) & 0xFF == ord('q'):
# break
# cap.release()
# cv2.destroyAllWindows()
# cv2.waitKey():
# 在显示帧时,选择适当的cv2.waitKey()时间,如果该值太小,视频会非常快,
# 如果它太大,视频会很慢(这可以用来慢动作显示视频)。 正常情况下,25毫秒即可。
三、OpenCV获取相机/视频的各种属性
# 获取相机/视频的各种属性–常见函数
"""
retval = cv2.VideoCapture.get(propId) #打开视频文件或者相机设备进行视频捕获。
propId 常见取值如下:【从0开始】
cv2.CAP_PROP_POS_MSEC: 视频文件的当前位置(ms)
cv2.CAP_PROP_POS_FRAMES: 从0开始索引帧,帧位置。
cv2.CAP_PROP_POS_AVI_RATIO:视频文件的相对位置(0表示开始,1表示结束)
cv2.CAP_PROP_FRAME_WIDTH: 视频流的帧宽度。
cv2.CAP_PROP_FRAME_HEIGHT: 视频流的帧高度。
cv2.CAP_PROP_FPS: 帧率
cv2.CAP_PROP_FOURCC: 编解码器四字符代码
cv2.CAP_PROP_FRAME_COUNT: 视频文件的帧数
cv2.CAP_PROP_FORMAT: retrieve()返回的Mat对象的格式。
cv2.CAP_PROP_MODE: 后端专用的值,指示当前捕获模式
cv2.CAP_PROP_BRIGHTNESS:图像的亮度,仅适用于支持的相机
cv2.CAP_PROP_CONTRAST: 图像对比度,仅适用于相机
cv2.CAP_PROP_SATURATION:图像饱和度,仅适用于相机
cv2.CAP_PROP_HUE: 图像色调,仅适用于相机
cv2.CAP_PROP_GAIN: 图像增益,仅适用于支持的相机
cv2.CAP_PROP_EXPOSURE: 曝光,仅适用于支持的相机
cv2.CAP_PROP_CONVERT_RGB:布尔标志,指示是否应将图像转换为RGB。
"""
四、视频保存失败的原因
多数是因为编码或者视频的宽度和写入的frame宽度不同,导致写入失败。因此,最好使用输入视频的编码(fourcc),视频的宽度也要设置对。不知道处理后的图片的大小,那就打印下图片的大小就行了,保存视频时,视频的大小要和图片的大小一致。
python-opencv写视频几个步骤:
fourcc = cv2.VideoWriter_fourcc(*‘DIVX’)
out = cv2.VideoWriter(‘D:/GestureVideo/’+video_name, fourcc, 10, (640, 480))
out.write(frame)
out.release()
bug1:代码生成exe文件后运行,保存的视频是0kb
网上说的opencv的dll文件放在exe同一目录,试了没用。
将编码器从DIVX改成MJPG解决了问题,不知道为何。
bug2:代码生成exe文件后运行,保存的视频不是0kb,但是打开时提示视频损坏
没有正确release(直接关闭dos窗口)。
bug3:视频文件无法读取,显示只有6kb
视频文件大小设置出了问题,可以先去查看读取的视频的属性,看它的宽和高,再设置w、h就没有问题了。
Python-OpenCV 读取和保存视频和解决保存失败的原因分析相关推荐
- python opencv读取mp4文件错误(已解决)
文章目录
- 解决Python OpenCV 读取视频并抽帧出现error while decoding的问题
解决Python OpenCV 读取视频抽帧出现error while decoding的问题 1. 问题 2. 解决 3. 源代码 参考 1. 问题 读取H264视频,抽帧视频并保存,报错如下: [ ...
- 解决 opencv读取手机拍摄的视频可能会自动旋转 90度
手机或者平板拍摄的视频, 在电脑上opencv 读取, 有的视频会自动旋转90度,因为手机可以横着或者竖着拍摄,网上可以用某些api读取图片的exif信息,在根据信息判断是否做旋转,但是我一直读不出 ...
- Python Opencv 之 简单的视频裁剪功能的实现
Python Opencv 之 简单的视频裁剪功能的实现 目录 Python Opencv 之 简单的视频裁剪功能的实现 一.简单介绍 二.实现原理 三.注意实现 四.效果预览 五.实现步骤 这里实现 ...
- opencv自动裁切_荐Python Opencv 之 简单的视频裁剪功能的实现
Python Opencv 之 简单的视频裁剪功能的实现 目录 一.简单介绍 Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随 ...
- win7安装android驱动失败怎么办,Win7蓝牙驱动安装失败的原因分析与解决方法
蓝牙是一种支持设备短距离通信的无线电技术,现在不管是手机还是电脑都已经普遍的使用蓝牙功能了.如果Win7系统电脑没有安装蓝牙驱动的话,是需要安装后才能使用的.最近,有用户在安装蓝牙驱动的时候,发现安装 ...
- python opencv读取视频没声音_python + opencv: 解决不能读取视频的问题
博主一开始使用python2.7和Opencv2.4.10来获取摄像头图像,程序如下: cap = cv2.VideoCapture(0) ret, frame = cap.read() 使用这个程序 ...
- 利用OpenCV读取和写入视频
简 介: 本文介绍了如何对三种不同的视频源(视频文件, 序列图片以及网络摄像头)来进行读取显示视频,使用视频捕获对象. 也给出了如何通过视频捕获对象获取视频流的重要元数据. 介绍了使用视频写入对象把视 ...
- opencv读取图片、视频、摄像头
计算机视觉处理,少不了需要会opencv,所以下面练习一下. # -*- coding: utf-8 -*- """ Created on Mon Jan 22 10:3 ...
最新文章
- Xilinx SDK使用教程
- listalias - 列出用户和系统别名
- 什么是网络可见性?—Vecloud微云
- 抄表 软件_云抄表小区智能电表远程抄表软件
- ZK安装、ZK配置、ZK集群部署踩过的大坑
- 因此,Oracle杀死了java.net
- Storm精华问答 | Kafka在Storm中的角色是什么?
- vs怎么写html5页面,怎么使用vscode写html5
- [Swift]LeetCode890. 查找和替换模式 | Find and Replace Pattern
- python经典实例-python经典实例
- js进阶正则表达式10-分组-多行匹配-正则对象的属性(小括号作用:分组,将小括号里面的东西看成一个整体,因为量词只对前一个字符有效)(多行匹配:m)(属性使用:reg.global)...
- 如何将txt文件迅速转为Excel文件
- 华为畅享max支持鸿蒙,华为手机怎么升级鸿蒙?华为鸿蒙系统支持手机型号大全...
- 清理vdbench后台进程
- Linux Block Driver - 1
- 如何打开别人的Android项目
- 2010-2011年美国大学综合排名
- 求大佬指教一下,小白不懂为什么子网IP和子网掩码相对应但却不匹配呢
- Android 根据网络图片URL转Bitmap对象
- css33d图片轮播_手把手教你用纯css3实现轮播图效果