OpenCV-环境搭建及基本IO接口

文章目录

环境搭建

开发环境基于python3.6, opencv-python版本为3.4.1.15

使用conda安装OpenCV开发环境

  1. 创建虚拟环境
Shell 复制代码
conda create -n opencv36 python=3.6
  1. 激活虚拟环境
Shell 复制代码
conda activate opencv36
  1. 安装opencv
Shell 复制代码
pip install opencv-python==3.4.1.15
pip install opencv-contrib-python==3.4.1.15

所有相关接口验证demo以上传至仓库

代码地址:https://gitee.com/norep/learn-opencv

窗口相关接口

创建窗口:cv2.namedWindow

Python 复制代码
cv2.namedWindow("My Window", cv2.WINDOW_NORMAL)

参数说明:

  • 窗口名称:窗口的标题。它是一个字符串,用于标识窗口

  • 窗口属性(可选参数) :

窗口属性(可选参数) :

  • cv2.WINDOW_NORMAL:这个标志表示窗口是可调整大小的。

  • cv2.WINDOW_AUTOSIZE:这个标志表示窗口大小会自动调整为与显示的图像大小相匹配,用户不能手动调整大小。

  • cv2.WINDOW_FREERATIO:这个标志表示窗口可以自由缩放。

  • cv2.WINDOW_KEEPRATIO:这个标志表示窗口在缩放时保持图像的宽高比。

  • cv2.WINDOW_GUI_EXPANDED:这个标志表示窗口有GUI扩展功能。

调整窗口大小:cv2.resizeWindow

Python 复制代码
cv2.resizeWindow("My Window", 640, 480)

参数说明:

  • 窗口名称:这是之前使用 cv2.namedWindow 创建的窗口的标题。它是一个字符串,用于标识要调整大小的窗口。

  • 宽度:这是你希望设置的新窗口的宽度,以像素为单位。

  • 高度:这是你希望设置的新窗口的高度,以像素为单位。

显示图像:cv2.imshow

Python 复制代码
cv2.imshow("My Image", image)

参数说明:

  • 窗口名称:这是之前使用 cv2.namedWindow 创建的窗口的标题。它是一个字符串,用于标识要显示图像的窗口。
  • 图像:这是你要显示的图像。它应该是一个 NumPy 数组,通常是使用 OpenCV 函数读取的图像数据。

注意

如果在调用 cv2.imshow 之前没有创建窗口(使用 cv2.namedWindow),OpenCV 会自动创建一个窗口。但是,如果想要设置窗口的属性,比如可调整大小,需要在显示图像之前显式地创建窗口。
必须要与cv2.waitKey函数配套调用,如果不调用 cv2.waitKey,可能会造成窗口无响应或崩溃

等待输入:cv2.waitKey

用于在显示图像后暂停程序的执行,等待用户输入

Python 复制代码
cv2.waitKey(0)  # 等待无限期,直到有键被按下
# 或者
cv2.waitKey(1000)  # 等待1000毫秒(1秒)

参数说明:

  • 延迟时间:这是函数等待按键输入的时间,以毫秒为单位。如果这个值是正数,函数将等待这么多毫秒或者直到有按键被按下。如果这个值是 0,函数将无限期地等待按键输入。如果这个值是负数,函数将立即返回,不等待任何按键。

返回值:

  • 按键的 ASCII 码,以便根据用户按下的键执行不同的操作。

销毁所有窗口:cv2.destroyAllWindows

用于关闭所有先前由 OpenCV 创建的窗口,并销毁与这些窗口相关的所有资源。

Python 复制代码
cv2.destroyAllWindows()

销毁指定窗口:cv2.destroyWindow

Python 复制代码
cv2.destroyWindow('Window Name')  # 关闭指定名称的窗口

参数说明:

  • 窗口名称:这是之前使用 cv2.namedWindow 创建的窗口的标题。

注意

cv2.destroyAllWindows 和 cv2.destroyWindow 只会影响 OpenCV 创建的窗口

图片相关接口

读取图像:cv2.imread

用于从文件中读取图像。这个函数非常基础且常用,是处理图像时的第一步。读取的图象是BGR格式。

Python 复制代码
image = cv2.imread(filename, flags)

参数说明:

  • filename:一个字符串,表示要读取的图像文件的路径。这个路径可以是相对路径或绝对路径。

  • flags(可选) :这是一个可选参数,用于指定如何读取图像。

常用的flags包括:

  • cv2.IMREAD_COLOR:加载彩色图像。任何图像的透明度将被忽略。

  • cv2.IMREAD_GRAYSCALE:以灰度模式加载图像。

  • cv2.IMREAD_UNCHANGED:包括图像的alpha通道加载图像。也就是说,加载图像的同时保留图像的透明度。

保存一个图像:cv2.imwrite

用于将图像保存到文件中

Python 复制代码
result = cv2.imwrite(filename, image)

参数说明:

  • filename:一个字符串,表示要保存的图像文件的路径。这个路径可以是相对路径或绝对路径。文件扩展名决定了图像的保存格式,例如 .jpg、.png、.bmp 等。

  • image:一个 NumPy 多维数组,通常是通过 OpenCV 的其他函数处理过的图像数据。数组的数据类型和形状取决于图像的通道数和深度。

返回值:

  • 如果函数成功保存图像,它会返回 True。

  • 如果无法保存图像(例如,文件无法写入,权限不足,格式不支持等),函数会返回 False。

注意

保存图像时,OpenCV 默认使用 BGR 格式,而不是常见的 RGB 格式。这意味着红色和蓝色通道在数组中是交换的。如果你有一个 RGB 格式的图像数组,你需要先使用 cv2.cvtColor 函数将其转换为 BGR 格式,然后再保存。

视频/摄像头相关接口

显示视频:cv2.VideoCapture

是 OpenCV 库中的一个类,用于从视频文件或摄像头捕获视频流。

Python 复制代码
cap = cv2.VideoCapture(filename_or_index)

参数说明:

  • filename_or_index:如果是一个字符串,它表示视频文件的路径。如果是一个整数,它表示摄像头的索引号(通常0表示第一个摄像头)。

返回值:

  • VideoCapture 对象

VideoCapture 类的主要方法

检查设备是否成功打开:isOpened()

用于检查视频捕获设备(如摄像头或视频文件)是否成功打开。这个方法返回一个布尔值,如果视频捕获设备成功打开,则返回 True,否则返回 False。

捕获下一帧:read()
Python 复制代码
 ret, frame = cap.read()

返回值:

  • 返回一个布尔值和一个帧。如果读取成功,返回 True 和当前的帧;如果读取失败或到达视频末尾,返回 False 和一个空帧。
获取视频流的某个属性:get()
Python 复制代码
get(propId)
# example: 
#  width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)

参数说明:

  • propId 是属性的标识符:

常用属性:

  • cv2.CV_CAP_PROP_POS_MSEC:返回当前视频帧的位置,单位为毫秒。

  • cv2.CV_CAP_PROP_POS_FRAMES:返回当前视频帧的位置,单位为帧数。

  • cv2.CV_CAP_PROP_POS_AVI_RATIO:返回当前视频帧的位置,单位为视频文件的总长度的比例。

  • cv2.CV_CAP_PROP_FRAME_WIDTH:返回视频流的宽度。

  • cv2.CV_CAP_PROP_FRAME_HEIGHT:返回视频流的高度。

  • cv2.CV_CAP_PROP_FPS:返回视频流的帧率。

  • cv2.CV_CAP_PROP_FOURCC:返回视频流的四字符代码(Four-CC)。

  • cv2.CV_CAP_PROP_FRAME_COUNT:返回视频文件中的总帧数。

设置视频流的某个属性: set(propId, value)
Python 复制代码
set(propId, value)

同上

关闭视频流并释放资源:release()
Python 复制代码
cap.release()

注意

在使用 VideoCapture 对象后,应该调用 release() 方法来释放资源,特别是在使用摄像头时。

read() 方法可能会因为各种原因失败,比如文件不存在、权限问题或设备问题。因此,每次调用 read() 后都应该检查返回的布尔值。

如果视频文件或摄像头的帧率很高,可能需要使用 cv2.waitKey 来控制帧的显示速度,以避免视频播放过快。

录制视频

指定视频编解码器的四字符代码:cv2.videowriter_fourcc

四字符代码是由四个字符组成的字符串,这些字符代表了特定的编解码器。不同的编解码器支持不同的视频格式和压缩选项。

Python 复制代码
fourcc = cv2.VideoWriter_fourcc(*'XVID')

参数说明:

  • 一些常见的四字符代码包括:

  • DIVX:用于 DivX 编解码器

  • XVID:用于 Xvid 编解码器

  • H264:用于 H.264 编解码器

  • MJPG:用于 Motion JPEG 编解码器

  • MP4V:用于 MPEG-4 编解码器

创建videoWriter对象: cv2.VideoWriter

OpenCV 库中的一个类,用于将视频序列写入文件。这个类允许你以不同的编解码器和格式保存视频文件。要使用 VideoWriter 类,你需要创建一个 VideoWriter 对象,然后不断地向它写入帧,最后释放对象以关闭视频文件。

Python 复制代码
out = cv2.VideoWriter(filename, fourcc, fps, frameSize[, isColor])

参数说明:

  • filename:一个字符串,表示要写入的视频文件的路径。文件扩展名决定了视频的保存格式,例如 .avi、.mp4、.mkv 等。

  • fourcc:一个表示视频编解码器的四字符代码,通常通过 cv2.VideoWriter_fourcc 函数获取。例如,cv2.VideoWriter_fourcc(*'XVID') 表示使用 Xvid 编解码器。

  • fps:一个整数或浮点数,表示视频的帧率(每秒帧数)。

  • frameSize:一个元组 (width, height),表示视频帧的大小。

  • isColor(可选):一个布尔值,指示写入的视频是否为彩色。如果为 True,则视频为彩色;如果为 False,则视频为灰度。默认值为 True。

返回值:

  • videoWriter对象

  • 如果创建失败,则返回 None。

注意:四字符代码的选择取决于你的系统和安装的编解码器。如果你选择的编解码器不受支持,VideoWriter 对象的创建可能会失败。

写入帧:out.write()

在完成视频写入后,务必调用 release() 方法来释放资源并正确关闭视频文件。

Python 复制代码
out.write(frame)

参数说明:

  • frame :应该是一个 NumPy 数组,代表要写入的视频帧。这个数组的形状和类型必须与创建 VideoWriter 对象时指定的帧大小和颜色模式相匹配。

  • 如果 frame 的形状或类型与预期的不同,out.write(frame) 可能会导致错误或写入的视频文件无法正常播放。

返回值:

  • 如果在写入过程中出现错误,out.write(frame) 可能会返回 False。因此,在实际应用中,你可能需要检查返回值并相应地处理错误。
相关推荐
这个男人是小帅21 分钟前
【GAT】 代码详解 (1) 运行方法【pytorch】可运行版本
人工智能·pytorch·python·深度学习·分类
__基本操作__22 分钟前
边缘提取函数 [OPENCV--2]
人工智能·opencv·计算机视觉
这是一个图像25 分钟前
从opencv-python入门opencv--图像处理之图像滤波
图像处理·opencv·计算机视觉·中值滤波·高斯滤波·双边滤波·图像滤波
Doctor老王27 分钟前
TR3:Pytorch复现Transformer
人工智能·pytorch·transformer
热爱生活的五柒27 分钟前
pytorch中数据和模型都要部署在cuda上面
人工智能·pytorch·深度学习
HyperAI超神经2 小时前
【TVM 教程】使用 Tensorize 来利用硬件内联函数
人工智能·深度学习·自然语言处理·tvm·计算机技术·编程开发·编译框架
扫地的小何尚4 小时前
NVIDIA RTX 系统上使用 llama.cpp 加速 LLM
人工智能·aigc·llama·gpu·nvidia·cuda·英伟达
埃菲尔铁塔_CV算法7 小时前
深度学习神经网络创新点方向
人工智能·深度学习·神经网络
艾思科蓝-何老师【H8053】7 小时前
【ACM出版】第四届信号处理与通信技术国际学术会议(SPCT 2024)
人工智能·信号处理·论文发表·香港中文大学
weixin_452600697 小时前
《青牛科技 GC6125:驱动芯片中的璀璨之星,点亮 IPcamera 和云台控制(替代 BU24025/ROHM)》
人工智能·科技·单片机·嵌入式硬件·新能源充电桩·智能充电枪