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。因此,在实际应用中,你可能需要检查返回值并相应地处理错误。
相关推荐
Elastic 中国社区官方博客1 小时前
使用 Elastic AI Assistant for Search 和 Azure OpenAI 实现从 0 到 60 的转变
大数据·人工智能·elasticsearch·microsoft·搜索引擎·ai·azure
江_小_白2 小时前
自动驾驶之激光雷达
人工智能·机器学习·自动驾驶
yusaisai大鱼4 小时前
TensorFlow如何调用GPU?
人工智能·tensorflow
珠海新立电子科技有限公司6 小时前
FPC柔性线路板与智能生活的融合
人工智能·生活·制造
IT古董6 小时前
【机器学习】机器学习中用到的高等数学知识-8. 图论 (Graph Theory)
人工智能·机器学习·图论
曼城周杰伦6 小时前
自然语言处理:第六十三章 阿里Qwen2 & 2.5系列
人工智能·阿里云·语言模型·自然语言处理·chatgpt·nlp·gpt-3
余炜yw7 小时前
【LSTM实战】跨越千年,赋诗成文:用LSTM重现唐诗的韵律与情感
人工智能·rnn·深度学习
莫叫石榴姐7 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
弗锐土豆8 小时前
工业生产安全-安全帽第二篇-用java语言看看opencv实现的目标检测使用过程
java·opencv·安全·检测·面部
如若1238 小时前
利用 `OpenCV` 和 `Matplotlib` 库进行图像读取、颜色空间转换、掩膜创建、颜色替换
人工智能·opencv·matplotlib