1、读、写、显示图像
图像的读取需要注意图像的路径,可以把图像放在代码目录下直接读取,也可以根据图像所在位置进行读取。OpenCV在安装过程中,如果安装了OpenCV自带的数据库可以直接读取,如果没有就不能直接调用相应文件。
1.1 读取图像
OpenCV用于读取图像的函数为:imread(),该函数支持BMP、PNG、JPEG和TIFF等格式图像文件。
import cv2
img=cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_GRAYSCALE_4) #读取图像
print(type(img)) #输出数据类型
print(img) #输出图像数组
print(img.shape) #输出数组形状
print(img.dtype) #输出数组元素的数据类型
print(img.size) #输出数组元素的个数
【运行结果】
【结果分析】
imread()函数返回一个numpy.ndarray对象(即 NumPy数组),数组元素为图像的像素。OpenCV使用NumPy数组来保存图像,数组的shape(数组形状)、dtype(数据类型)、size(数组元素个数)等属性表示图像的相关属性。
- img.shape的输出结果为(512,512,3),说明表示彩色图像的数组是一个三维数组,3个值依次表示图像的高度、宽度和通道数;图像的分辨率为512x512。
- img.dtypes的输出结果为uint8,说明每个数组元素用一个字节(8位)保存,每个数组元素为一个像素的B、G和尺通道的颜色值,颜色值取值范围为[0,255]
- img.size 的输出为 786432,等于数组形状的3个维度大小的乘积,即512x512x3。
如果图片不在编译代码路径下,需要自己添加路径:例如图片放在E盘根目录下
读取方式为:
img = cv2.imread('E:\lena.jpg')
imread()函数的完整格式如下
img=cv2.imread(filename,flag)
【参数说明】filename:图像文件名;flag:图像读取格式标志。
图像读取格式如下:
示例
import cv2
img1 = cv2.imread('lena.jpg',cv2.IMREAD_COLOR)
img2 = cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_GRAYSCALE_4)
print(img1.shape)
print(img2.shape)
【运行结果】
【结果分析】
图像1是3通道的512*512的图像,图像2将图像转换为单通道图像尺寸减少为1/4,输出128*128的图像数组。
1.2 写图像
OpenCV中imwrite()函数用于将numpy数组中保存的图像写入文件。
import cv2
import numpy
img=numpy.zeros((50,50),dtype=numpy.uint8)#创建50*50的黑色正方形图像
cv2.imwrite('mypic2-1.jpg',img) #保存图像
【运行结果】
1.3 显示图像
OpenCV的imshow()函数用于窗口显示图像。
import cv2
img=cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_COLOR_2) #读取图像,缩小为原来的1/2
cv2.imshow('lena',img) #显示图像
key=0
while key!=27: #按Esc键时终止循环
key=cv2.waitKey() #等待按键
【运行结果】
2、读、写、播放视频
OpenCV的 VideoCapture 类和 VideoWriter类提供了视频处理功能,支持各种格式的视频文件。
视频处理的基本操作步骤如下:
- 将视频文件或者摄像头作为数据源来创建VideoCapture 对象。
- 调用 VideoCapture 对象的read()方法获取视频中的顿,每一帧都是一幅图像
- 调用VideoWriter 对象的 write()方法将帧写入视频文件,或者调用cv2.imshow()函数在窗口中显示帧(即播放视频)。
2.1 获取摄像头视频
要捕获摄像头视频,需要将摄像头ID作为参数来创建 VideoCapture 对象。通常,0表示默认摄像头,示例代码如下。
import cv2
vc=cv2.VideoCapture(0) #创建VideoCapture对象,视频源为默认摄像头
fps=30 #预设视频帧率
size=(int(vc.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(vc.get(cv2.CAP_PROP_FRAME_HEIGHT))) #读取视频大小
vw=cv2.VideoWriter('test2-7out.avi', #设置保存视频的文件名
cv2.VideoWriter_fourcc('X','V','I','D'),#设置视频解码器格式
fps,size) #设置帧速率和大小
success,frame=vc.read() #读第1帧
while success: #循环读视频帧,直到视频结束
vw.write(frame) #将帧写入文件
cv2.imshow('MyCamera',frame) #显示帧
if cv2.waitKey(1) == ord('q'): #按q键结束
break
success,frame=vc.read() #读下一帧
vc.release() #关闭视频
【运行结果】点击摄像头窗口,按"q"退出摄像。
2.2 播放视频
import cv2
vc=cv2.VideoCapture('test2-7out.avi') #创建VideoCapture对象
fps=vc.get(cv2.CAP_PROP_FPS) #读取视频帧率
size=(vc.get(cv2.CAP_PROP_FRAME_WIDTH),
vc.get(cv2.CAP_PROP_FRAME_HEIGHT)) #读取视频大小
print('帧率:',fps)
print('大小:',size)
success,frame=vc.read() #读第1帧
while success: #循环读视频帧,直到视频结束
cv2.imshow('C919',frame) #在窗口中显示帧图像
success,frame=vc.read() #读下一帧
key=cv2.waitKey(25)
if key==27: #按Esc键退出
break
vc.release() #关闭视频
2.3 将视频写入文件
import cv2
vc=cv2.VideoCapture('test2-5.mp4') #创建VideoCapture对象
fps=vc.get(cv2.CAP_PROP_FPS) #读取视频帧率
size=(int(vc.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(vc.get(cv2.CAP_PROP_FRAME_HEIGHT))) #读取视频大小
vw=cv2.VideoWriter('test2-6out.avi', #设置保存视频的文件名
cv2.VideoWriter_fourcc('X','V','I','D'),#设置视频解码器格式
fps,size) #设置帧速率和大小
success,frame=vc.read() #读第1帧
while success: #循环读视频帧,直到视频结束
vw.write(frame) #将帧写入文件
success,frame=vc.read() #读下一帧
vc.release()