图像处理——基础操作

发布时间:2023年12月28日

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()             
文章来源:https://blog.csdn.net/qq_41566819/article/details/135249188
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。