图像的读取需要注意图像的路径,可以把图像放在代码目录下直接读取,也可以根据图像所在位置进行读取。OpenCV在安装过程中,如果安装了OpenCV自带的数据库可以直接读取,如果没有就不能直接调用相应文件。
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(数组元素个数)等属性表示图像的相关属性。
如果图片不在编译代码路径下,需要自己添加路径:例如图片放在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的图像数组。
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() #等待按键
【运行结果】
OpenCV的 VideoCapture 类和 VideoWriter类提供了视频处理功能,支持各种格式的视频文件。
视频处理的基本操作步骤如下:
要捕获摄像头视频,需要将摄像头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”退出摄像。
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() #关闭视频
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()