图像处理——基础操作

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()             
相关推荐
_.Switch18 分钟前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
AI极客菌1 小时前
Controlnet作者新作IC-light V2:基于FLUX训练,支持处理风格化图像,细节远高于SD1.5。
人工智能·计算机视觉·ai作画·stable diffusion·aigc·flux·人工智能作画
阿_旭1 小时前
一文读懂| 自注意力与交叉注意力机制在计算机视觉中作用与基本原理
人工智能·深度学习·计算机视觉·cross-attention·self-attention
王哈哈^_^1 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
测开小菜鸟1 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
Power20246662 小时前
NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型
人工智能·深度学习·机器学习·自然语言处理·nlp
数据猎手小k2 小时前
AIDOVECL数据集:包含超过15000张AI生成的车辆图像数据集,目的解决旨在解决眼水平分类和定位问题。
人工智能·分类·数据挖掘
好奇龙猫2 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
沉下心来学鲁班2 小时前
复现LLM:带你从零认识语言模型
人工智能·语言模型
数据猎手小k2 小时前
AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。
android·人工智能·机器学习·语言模型