概述
学得不好,想到哪写到哪。
先说几个我这个新手犯得错误吧。
经过查资料,我这个if语句其实可以简写一下,虽然我这么写语法上也没毛病。因为ret本身就是一个布尔类型的值,不是True就是Flase,而if语句当条件是“真”的时候才会执行条件下的语句,所以这行代码可以这么简写:
这样语句下就不会画波浪线了,并且意思和以前一样。还有一个问题就是如下:
问题就是我加了括号。因为我以前用C语言编51单片机程序习惯了,if语句就加了括号,去掉括号就好了。
接下来步入主题,上代码。
import cv2 #调用库
'''
cap = cv2.VideoCapture(filename)
# capture有捕获的意思,上面函数的意思就是从文件中捕获视频
# filename是文件名,.py文件和视频放在一个文件夹时输入文件名即可
# 不在一个文件夹时还要加上视频所在的路径
'''
cap = cv2.VideoCapture('2.avi')
'''
#视频实际上是一帧一帧图像组成的,读取视频就是循环读取图片
#要想循环读取,得先打开文件吧,打开文件后得判断一下是否打开了吧
cv2.VideoCapture().isOpened(),也就是cap.isOpened()
#判断是否正常打开文件,正确就返回个True
'''
while cap.isOpened() :
'''
ret, frame = cap.read()
# ret值为True或者False,是否取帧成功
# frame为取帧的图像
'''
ret, frame = cap.read()
if not ret: # 如果取帧失败,退出循环
print('取帧失败,退出循环') # 输出一下好知道问题在哪(这样显得逼格高,,,)
break
'''
cv2.imshow(winname,mat)
# winname为显示的窗口
# mat 需要显示的图像
'''
cv2.imshow('HuoYing', frame) # 取完帧之后显示帧在窗口
'''
#个人理解这里这么写的原因是就像单片机八位数码管循环显示数字一样
#如果不在每位数码管显示完数字后延时一下,数字就会飞快闪过看不清
#在这里不延时的话就会一直卡在第一帧图像那里,所以要延时
'''
if cv2.waitKey(50) & 0xFF == 27: # 按下Esc键退出,延时50毫秒就相当于一秒20帧
exit(0)
cap.release() # 释放cap
cv2.destroyAllWindows() # 销毁所有窗口
结果就是读取一个叫“2.avi”的视频,并在叫“HuoYing”的窗口显示出来。
最后
以上就是包容毛衣为你收集整理的004-读取视频补充的全部内容,希望文章能够帮你解决004-读取视频补充所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复