在OpenCV中我们还可以指定imread的模式,所支持的选项包括:
cv2.IMREAD_COLOR:该模式是默认选项,提供3通道的BGR图
像,每个通道一个8位值(0~255)。
cv2.IMREAD_GRAYSCALE:该模式提供8位灰度图像。
cv2.IMREAD_ANYCOLOR:该模式提供每个通道8位的BGR图
像或者8位灰度图像,具体取决于文件中的元数据。
cv2.IMREAD_UNCHANGED:该模式读取所有的图像数据,包
括作为第4通道的α或透明度通道(如果有的话)。
cv2.IMREAD_ANYDEPTH:该模式加载原始位深度的灰度图
像。例如,如果文件以这种格式表示一幅图像,那么它提供每个通道
16位的一幅灰度图像。
cv2.IMREAD_ANYDEPTH|cv2.IMREAD_COLOR:该组合模式
加载原始位深度的BGR彩色图像。
cv2.IMREAD_REDUCED_GRAYSCALE_2:该模式加载的灰度
图像的分辨率是原始分辨率的1/2。例如,如果文件包括一幅640×480
的图像,那么它加载的是一幅320×240的图像。
cv2.IMREAD_REDUCED_COLOR_2:该模式加载每个通道8位
的BGR彩色图像,分辨率是原始图像的1/2。
cv2.IMREAD_REDUCED_GRAYSCALE_4:该模式加载灰度图
像,分辨率是原始图像的1/4。
cv2.IMREAD_REDUCED_COLOR_4:该模式加载每个通道8位
的彩色图像,分辨率是原始图像的1/4。
cv2.IMREAD_REDUCED_GRAYSCALE_8:该模式加载灰度图
像,分辨率是原始图像的1/8。
cv2.IMREAD_REDUCED_COLOR_8:该模式加载每个通道8位
的彩色图像,分辨率为原始图像的1/8。
OpenCV提供了VideoCapture和VideoWriter类,支持各种视频文件
格式。支持的格式取决于操作系统和OpenCV的构建配置,但是通常情
况下,假设支持AVI格式是安全的。通过它的read方法,VideoCapture
对象可以依次查询新的帧,直到到达视频文件的末尾。每一帧都是一
幅BGR格式的图像。
import cv2
import matplotlib.pyplot as plt
import numpy as np
vc = cv2.VideoCapture("diqiu.mp4") # 传入视频流
# 检查是否打开正确
if vc.isOpened(): # 检查是否能打开
open, frame = vc.read() # read逐帧读取,帧读入返回值open为True,第二个返回值为当前帧的图像值
else:
open = False
原视频如下
diqiu
# 进一步放入循环中
while open:
ret, frame = vc.read()
if frame is None:
break
if ret == True:
# 当前这一帧正确,进行当前图像的处理
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 当前帧转换为灰度图
cv2.imshow('result', gray)
# 循环中可以实现逐帧播放
if cv2.waitKey(100) & 0xFF == 27: # 这里设置当前帧的一个等待时间与ESC退出键的命令来退出视频
break
vc.release()
cv2.destroyAllWindows()
到此就可以直接在屏幕上输出逐帧转化为灰度图的视频流,如下