1、安装依赖库
pip install opencv-python # 主模块包
pip install opencv-contrib-python # 主模块+附加模块
pip install numpy # numpy 库
2、图像的读取、显示、保存
读取:cv2.imread()
img = cv2.imread(path, flag)
img: cv2.imread()函数返回值,如果读取失败则为None。
path: 图像文件的路径,图片格式:*.bmp、*.jpg、*.png、*.tiff 等。
flag: 文件读取方式,默认为:1。常见方式有以下几种:
方式 | 值 | 解释 |
IMREAD_UNCHANGED | -1 | 原图,并保留Alpha透明度通道 |
IMREAD_GRAYSCALE | 0 | 灰度图 |
IMREAD_COLOR | 1 | BGR |
显示:cv2.imshow()
cv2.imshow('name', image)
'name':窗口名称。
image:要显示的图片对象。
存储:cv2.imwrite()
ret = cv2.imwrite('path', image)
'path':存储图像的路径/图像名/格式---如:'Lena.png'。
image:要存储的图片对象。
示例:
import cv2
# 读取
img1 = cv2.imread('Lena.png')
img2 = cv2.imread('Lena.png',cv2.IMREAD_GRAYSCALE)
img3 = cv2.imread('Lena.png',cv2.IMREAD_UNCHANGED)
img4 = cv2.imread('Lena.png',cv2.IMREAD_COLOR)
# 显示
cv2.imshow('Lena_1',img1)
cv2.waitKey(0) # 等待时长,单位ms,0表示按任意键取消等待。
cv2.destroyWindow('Lena_1') # 关闭名称为 'Lena_1' 的窗口。
cv2.imshow('Lena_2',img2)
cv2.waitKey(0)
cv2.imshow('Lena_3',img3)
cv2.waitKey(0)
cv2.imshow('Lena_4',img4)
cv2.waitKey(0)
# 保存
cv2.imwrite('Lena_1.png',img1) # 保存一个作为示例
# 关闭窗口
cv2.destroyAllWindows() # 关闭所有窗口。
3、视频的读取、显示、保存
读取:cv2.VideoCapture()
capture = cv2.VideoCapture('test.mp4') # 0 为本机摄像头
capture: cv2.VideoCapture()函数返回值,如果读取失败则为None。
path: 视频文件的路径,图片格式:*.mp4 等。
显示:capture.get()
frame = capture.get(flag)
frame:视频的属性,capture.get()函数的返回值,与传入的参数有关。
flag:属性请求参数,常见方式有以下几种:
视频属性 | 解释 |
CAP_PROP_POS_FRAMES | 视频的当前帧 |
CAP_PROP_POS_MSEC | 当前帧的时间戳 |
CAP_PROP_FPS | 获取FPS |
CAP_PROP_FRAME_WODTH | 视频帧的宽度 |
CAP_PROP_FRAME_HEIGHT | 视频帧的高度 |
CAP_PROP_FRAME_COUNT | 视频的总帧数 |
获取视频的属性
# 获取视频的属性
frame_width = capture.get(cv2.CAP_PROP_FRAME_WIDTH)
frame_height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = capture.get(cv2.CAP_PROP_FPS)
以图片帧的方式播放视频
while capture.isOpened():
ret, frame = capture.read()
if ret:
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
out_gray.write(gray_frame) # 注意这里的视频帧颜色要与前面的 False/Ture 对应。
cv2.imshow('test', gray_frame)
if cv2.waitKey(10) & 0xFF == ord('q'):
break
else:
break
capture.release()
out_gray.release()
cv2.destroyAllWindows()
存储:cv2.VideoWriter()
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
cv2.VideoWriter('path', fourcc, int(fps), (int(frame_width), int(frame_height)), False)
cv2.VideoWriter_fourcc():使用四字节编码器fourcc指定视频编码器,此处编码器定义为'mp4v'。
'path':视频保存地址,*.mp4 等。
fourcc:fourcc 本身是一个 32 位的无符号数值,用 4 个字母表示采用的编码器。一般依据你的电脑环境安装了哪些编码器。 常用的有 “DIVX"、”MJPG"、“XVID”、“X264"。可用的列表在这里,点击Video Codecs by FOURCC。
fps:视频的帧率。
frame_width;视频帧的宽度。
frame_width:视频帧的高度。
False:以灰度方式写入视频;Ture:以彩色方式写入视频。
示例:
import cv2
# 读取
capture = cv2.VideoCapture('cxk.mp4')
# 视频属性
frame_width = capture.get(cv2.CAP_PROP_FRAME_WIDTH)
frame_height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = capture.get(cv2.CAP_PROP_FPS)
# 保存与播放
fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
out_gray = cv2.VideoWriter('test.mp4', fourcc, int(fps), (int(frame_width), int(frame_height)), False)
while capture.isOpened():
ret, frame = capture.read()
if ret:
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
out_gray.write(gray_frame) # 注意这里的视频帧颜色要与前面的 False/Ture 对应。
cv2.imshow('test', gray_frame)
if cv2.waitKey(10) & 0xFF == ord('q'):
break
else:
break
capture.release()
out_gray.release()
cv2.destroyAllWindows()