一、安装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 读取和保存视频和解决保存失败的原因分析相关推荐

  1. python opencv读取mp4文件错误(已解决)

    文章目录

  2. 解决Python OpenCV 读取视频并抽帧出现error while decoding的问题

    解决Python OpenCV 读取视频抽帧出现error while decoding的问题 1. 问题 2. 解决 3. 源代码 参考 1. 问题 读取H264视频,抽帧视频并保存,报错如下: [ ...

  3. 解决 opencv读取手机拍摄的视频可能会自动旋转 90度

    手机或者平板拍摄的视频,  在电脑上opencv 读取, 有的视频会自动旋转90度,因为手机可以横着或者竖着拍摄,网上可以用某些api读取图片的exif信息,在根据信息判断是否做旋转,但是我一直读不出 ...

  4. Python Opencv 之 简单的视频裁剪功能的实现

    Python Opencv 之 简单的视频裁剪功能的实现 目录 Python Opencv 之 简单的视频裁剪功能的实现 一.简单介绍 二.实现原理 三.注意实现 四.效果预览 五.实现步骤 这里实现 ...

  5. opencv自动裁切_荐Python Opencv 之 简单的视频裁剪功能的实现

    Python Opencv 之 简单的视频裁剪功能的实现 目录 一.简单介绍 Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随 ...

  6. win7安装android驱动失败怎么办,Win7蓝牙驱动安装失败的原因分析与解决方法

    蓝牙是一种支持设备短距离通信的无线电技术,现在不管是手机还是电脑都已经普遍的使用蓝牙功能了.如果Win7系统电脑没有安装蓝牙驱动的话,是需要安装后才能使用的.最近,有用户在安装蓝牙驱动的时候,发现安装 ...

  7. python opencv读取视频没声音_python + opencv: 解决不能读取视频的问题

    博主一开始使用python2.7和Opencv2.4.10来获取摄像头图像,程序如下: cap = cv2.VideoCapture(0) ret, frame = cap.read() 使用这个程序 ...

  8. 利用OpenCV读取和写入视频

    简 介: 本文介绍了如何对三种不同的视频源(视频文件, 序列图片以及网络摄像头)来进行读取显示视频,使用视频捕获对象. 也给出了如何通过视频捕获对象获取视频流的重要元数据. 介绍了使用视频写入对象把视 ...

  9. opencv读取图片、视频、摄像头

    计算机视觉处理,少不了需要会opencv,所以下面练习一下. # -*- coding: utf-8 -*- """ Created on Mon Jan 22 10:3 ...

最新文章

  1. Xilinx SDK使用教程
  2. listalias - 列出用户和系统别名
  3. 什么是网络可见性?—Vecloud微云
  4. 抄表 软件_云抄表小区智能电表远程抄表软件
  5. ZK安装、ZK配置、ZK集群部署踩过的大坑
  6. 因此,Oracle杀死了java.net
  7. Storm精华问答 | Kafka在Storm中的角色是什么?
  8. vs怎么写html5页面,怎么使用vscode写html5
  9. [Swift]LeetCode890. 查找和替换模式 | Find and Replace Pattern
  10. python经典实例-python经典实例
  11. js进阶正则表达式10-分组-多行匹配-正则对象的属性(小括号作用:分组,将小括号里面的东西看成一个整体,因为量词只对前一个字符有效)(多行匹配:m)(属性使用:reg.global)...
  12. 如何将txt文件迅速转为Excel文件
  13. 华为畅享max支持鸿蒙,华为手机怎么升级鸿蒙?华为鸿蒙系统支持手机型号大全...
  14. 清理vdbench后台进程
  15. Linux Block Driver - 1
  16. 如何打开别人的Android项目
  17. 2010-2011年美国大学综合排名
  18. 求大佬指教一下,小白不懂为什么子网IP和子网掩码相对应但却不匹配呢
  19. Android 根据网络图片URL转Bitmap对象
  20. css33d图片轮播_手把手教你用纯css3实现轮播图效果

热门文章

  1. (背包dp) 背包N讲
  2. 如何在 Linux 和 Unix 上安装 git?
  3. 北航2021编译原理实验样例编译器-PCODE实现总结
  4. 10019---层次选择器
  5. 微信银行突破单一模式功能日渐强大
  6. Huffman Coding 哈夫曼树
  7. Ternary String
  8. 计算机房精密空调术语,机房精密空调参数及含义
  9. Matlab 科研绘图汇总
  10. Android关于网络访问app应用开发相关的异常总结