海外访问国内网站 dns,网络营销策划书范文模板,网站建设与维护A卷答案,多用户商城app开发【1】引言
上一次课学习了用opencv读取图像#xff0c;掌握了三个函数#xff1a;cv.imread()、cv.imshow()、cv.imwrite()
相关链接如下#xff1a;
python学opencv|读取图像-CSDN博客
这次课我们继续#xff0c;来学习用opencv读取视频。
【2】学习资源
首先是官网…【1】引言
上一次课学习了用opencv读取图像掌握了三个函数cv.imread()、cv.imshow()、cv.imwrite()
相关链接如下
python学opencv|读取图像-CSDN博客
这次课我们继续来学习用opencv读取视频。
【2】学习资源
首先是官网资源查看下述代码
OpenCV: Getting Started with Videos
然后是对应的中文版博客资源查看下述链接
2. GUI 功能 - 视频入门 - 《OpenCV 中文文档 4.0.0》 - 书栈网 · BookStack
这两个内容基本上是一模一样所以按照自己的喜好选用即可。
这次课程的学习目的是掌握视频的读取和保存涉及两个函数
cv.VideoCapture()cv.VideoWriter()
【3】函数解读
【3.1】cv.VideoCapture()函数
点击下述链接直达官网解读页面
https://docs.opencv.org/4.0.0/d8/dfe/classcv_1_1VideoCapture.html
这里的核心意思也很简单Class for video capturing from video files, image sequences or cameras.
简而言之就是从视频文件、系列图片或者照相机中读取视频。
【3.2】cv.VideoWrite()函数
点击下述链接直达官网解读页面
OpenCV: cv::VideoWriter Class Reference
核心意思Video writer class.
简而言之就是保存视频。
【4】 代码解读
在上述解读的基础上我们尝试理解代码。
书栈网2. GUI 功能 - 视频入门 - 《OpenCV 中文文档 4.0.0》 - 书栈网 · BookStack提供了非常简洁的代码我们对其解读 import numpy as npimport cv2 as cvcap 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):break# 当所有事完成释放 VideoCapture 对象cap.release()cv.destroyAllWindows()
首先是引入计算和opencv模块 import numpy as np #引入计算模块
import cv2 as cv #引入opencv模块 然后直接调用cv.VideoCapture()函数读取视频 cap cv.VideoCapture(0) #读取视频 之后给了一个自定义函数这个函数逐帧读取视频然后把视频变成灰色输出里面使用了imshow()函数支持输出 while (True): #自定义函数# 一帧一帧捕捉ret, frame cap.read()# 我们对帧的操作在这里gray cv.cvtColor(frame, cv.COLOR_BGR2GRAY) #将每一帧都换成灰色# 显示返回的每帧cv.imshow(frame, gray) #输出灰色的视频if cv.waitKey(1) 0xFF ord(q):break 然后任务完成释放所有对象 # 当所有事完成释放 VideoCapture 对象
cap.release() #读取完成后释放也就是任务完成后休息
cv.destroyAllWindows() #关闭窗口 实际上运行上述代码没有任何输出甚至还会保存因为至少没有视频支持读取。
所以为了完成对代码的理解还有必要稍加改写。
上次课已经知晓要被读取的对象最好和python程序放在一起所以我做了一个视频和程序放在了同一个位置视频链接为 dnlp-aixmls 然后把代码修改为
import numpy as np #引入计算模块
import cv2 as cv #引入opencv模块cap cv.VideoCapture(dnlp-aixmls.mp4) #读取视频
while (True): #自定义函数# 一帧一帧捕捉ret, frame cap.read()# 我们对帧的操作在这里gray cv.cvtColor(frame, cv.COLOR_BGR2GRAY) #将每一帧都换成灰色# 显示返回的每帧cv.imshow(frame, gray) #输出灰色的视频if cv.waitKey(1) 0xFF ord(q):break
# 当所有事完成释放 VideoCapture 对象
cap.release() #读取完成后释放也就是任务完成后休息
cv.destroyAllWindows() #关闭窗口
视频按照灰色的模样进行了输出效果为 使用pythonopencv转化灰度视频 【5】 灰度视频保存
根前述内容已知使据用cv.VideoWrite()函数可以保存视频。
先引入一个翻转视频后再将其保存的示例示例依然来自2. GUI 功能 - 视频入门 - 《OpenCV 中文文档 4.0.0》 - 书栈网 · BookStack
import numpy as np #引入计算模块
import cv2 as cv #引入opencv模块cap cv.VideoCapture(0) #读取视频
# 声明编码器和创建 VideoWrite 对象
fourcc cv.VideoWriter_fourcc(*XVID) #指定视频解码器XVID只是其中一种方法
out cv.VideoWriter(output.avi, fourcc, 20.0, (640, 480)) #输出视频
while (cap.isOpened()): #自定义函数ret, frame cap.read()if ret True:frame cv.flip(frame, 0) #对图像进行翻转调用了flip()函数# 写入已经翻转好的帧out.write(frame) #保存视频cv.imshow(frame, frame) #输出视频if cv.waitKey(1) 0xFF ord(q):breakelse:break
# 释放已经完成的工作
cap.release()
out.release()
cv.destroyAllWindows() 上面先给出了加了注释的官网示例代码然后我们很直观的会发现保存视频主要增加了两行汇总要代码 fourcc cv.VideoWriter_fourcc(*XVID) #指定视频解码器XVID只是其中一种方法
out cv.VideoWriter(output.avi, fourcc, 20.0, (640, 480)) #输出视频 fourcc用于视频解码out用于视频保存。
逻辑上也非常简单先知道了视频的格式也就是掌握了该如何处理的方法然后按照期待的方向将其格式和名称进行转化就可以。
不过官网代码还不能直接使用所以我们稍微修改一下转化为下述形式
import numpy as np #引入计算模块
import cv2 as cv #引入opencv模块cap cv.VideoCapture(dnlp-aixmls.mp4) #读取视频
# 声明编码器和创建 VideoWrite 对象
fourcc cv.VideoWriter_fourcc(*XVID) #指定视频解码器XVID只是其中一种方法
out cv.VideoWriter(output-100.mp4, fourcc, 20.0, (1920, 1040)) #输出视频
while (cap.isOpened()): #自定义函数ret, frame cap.read()if ret True:frame cv.flip(frame, 0) #对图像进行翻转调用了flip()函数# 写入已经翻转好的帧out.write(frame) #保存视频cv.imshow(frame, frame) #输出视频if cv.waitKey(1) 0xFF ord(q):breakelse:break
# 释放已经完成的工作
cap.release()
out.release()
cv.destroyAllWindows()
实际上我们看到这是一个彩色的翻转视频链接如下。 使用pythonopencv翻转视频 结合一下对前面的灰度视频转化的操作我们尝试保存一下灰度视频。
首先输入下述代码
import numpy as np #引入计算模块
import cv2 as cv #引入opencv模块cap cv.VideoCapture(dnlp-aixmls.mp4) #读取视频
# 声明编码器和创建 VideoWrite 对象
fourcc cv.VideoWriter_fourcc(*XVID) #指定视频解码器XVID只是其中一种方法
out cv.VideoWriter(output-flip-gray.mp4, fourcc, 20.0, (1920, 1040),False) #输出视频
while (cap.isOpened()): #自定义函数ret, frame cap.read()if ret True:frame cv.flip(frame, 0) #对图像进行翻转调用了flip()函数gray cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# 写入已经翻转好的帧out.write(gray) #保存视频cv.imshow(gray, gray) #输出视频if cv.waitKey(1) 0xFF ord(q):breakelse:break
# 释放已经完成的工作
cap.release()
out.release()
cv.destroyAllWindows()
这里和之前纯翻转代码的区别是
【a】cv.VideoWrite()函数后增加了False正是False参数的出现实现了灰度视频保存
【b】out.write()和cv.imshow()的参数是gray它们和False参数一起保证了保存灰度视频。
【c】修改out.write()和cv.imshow()的参数gray为frame代码不可以运行。
在v.VideoWrite()函数的官网OpenCV: cv::VideoWriter Class Reference可以看到解释 图1
时间也会发现这是一个小细节只有在cv.VideoWrite()函数后增加了False参数灰度视频才会被成功保存。 图2
保存后的翻转灰度视频为 pythonopencv做灰度视频并将其翻转 【6】 总结
初步学习了使用cv.VideoCapture()函数和cv.VideoWrite()函数处理视频的基本技巧。