使用OpenCV处理视频并显示灰度图像
目录
- 导入OpenCV库
- 打开视频文件
- 定义显示图像的函数
- 检查视频是否成功打开并读取第一帧
- 循环读取视频帧
- 释放资源
- 完整代码
导入OpenCV库
import cv2 # 导入OpenCV库
打开视频文件
注意:视频随便去搜一个就可以 我用的是风景的
# 打开视频文件
vc = cv2.VideoCapture('bg.mp4')
定义显示图像的函数
# 定义一个函数用于显示图像
def img_show(name, img):cv2.imshow(name, img) # 显示图像cv2.waitKey(0) # 按任意键退出cv2.destroyAllWindows() # 关闭所有OpenCV创建的窗口
检查视频是否成功打开并读取第一帧
if vc.isOpened():# 如果视频打开成功,设置open为True# frame 为读取到的帧图像open, frame = vc.read()img_show('img(01)', frame)
else:# 如果视频打开失败,设置open为Falseopen = False
循环读取视频帧
# 循环读取视频帧
while open:# 读取视频的下一帧,ret为布尔值表示是否成功读取,frame为帧图像ret, frame = vc.read()# 如果读取到的帧为空,跳出循环if frame is None:break# 如果成功读取到帧if ret == True:# 从视频流中读取帧# 将帧从BGR颜色空间转换为灰度空间# 灰度值 = 0.299 * R + 0.587 * G + 0.114 * B# 这个公式反映了人眼对绿色的敏感度最高,对蓝色的敏感度最低。# 帧图的颜色通道为 BGRimg_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 显示灰度图像cv2.imshow('result', img_gray)# 等待10毫秒,如果按下Esc键(ASCII码为27),则退出循环if cv2.waitKey(10) & 0xFF == 27:break
释放资源
vc.release() # 释放视频捕获对象
cv2.destroyAllWindows() # 关闭所有OpenCV创建的窗口
完整代码
import cv2 # 导入OpenCV库# 打开视频文件
vc = cv2.VideoCapture('bg.mp4')# 定义一个函数用于显示图像
def img_show(name, img):cv2.imshow(name, img) # 显示图像cv2.waitKey(0) # 按任意键退出cv2.destroyAllWindows() # 关闭所有OpenCV创建的窗口# 检查视频是否成功打开
if vc.isOpened():# 如果视频打开成功,设置open为True# frame 为读取到的帧图像open, frame = vc.read()img_show('img(01)', frame)
else:# 如果视频打开失败,设置open为Falseopen = False# 循环读取视频帧
while open:# 读取视频的下一帧,ret为布尔值表示是否成功读取,frame为帧图像ret, frame = vc.read()# 如果读取到的帧为空,跳出循环if frame is None:break# 如果成功读取到帧if ret == True:# 从视频流中读取帧# 将帧从BGR颜色空间转换为灰度空间# 灰度值 = 0.299 * R + 0.587 * G + 0.114 * B# 这个公式反映了人眼对绿色的敏感度最高,对蓝色的敏感度最低。# 帧图的颜色通道为 BGRimg_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 显示灰度图像cv2.imshow('result', img_gray)# 等待10毫秒,如果按下Esc键(ASCII码为27),则退出循环if cv2.waitKey(10) & 0xFF == 27:breakvc.release() # 释放视频捕获对象
cv2.destroyAllWindows() # 关闭所有OpenCV创建的窗口