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

文章目录

  • 使用conda安装OpenCV开发环境
  • 所有相关接口验证demo以上传至仓库
  • 窗口相关接口
    • 创建窗口:cv2.namedWindow
    • 调整窗口大小:cv2.resizeWindow
    • 显示图像:cv2.imshow
    • 等待输入:cv2.waitKey
    • 销毁所有窗口:cv2.destroyAllWindows
    • 销毁指定窗口:cv2.destroyWindow
  • 图片相关接口
    • 读取图像:cv2.imread
    • 保存一个图像:cv2.imwrite
  • 视频/摄像头相关接口
    • 显示视频:cv2.VideoCapture
      • VideoCapture 类的主要方法
        • 检查设备是否成功打开:isOpened()
        • 捕获下一帧:read()
        • 获取视频流的某个属性:get()
        • 设置视频流的某个属性: set(propId, value)
        • 关闭视频流并释放资源:release()
    • 录制视频
      • 指定视频编解码器的四字符代码:cv2.videowriter_fourcc
      • 创建videoWriter对象: cv2.VideoWriter
      • 写入帧:out.write()

使用conda安装OpenCV开发环境

1. 创建虚拟环境conda create -n opencv36 python=3.6
2. 激活虚拟环境conda activate opencv36
3. 安装opencvpip install opencv-python==3.4.1.15pip install opencv-contrib-python==3.4.1.15

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

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

窗口相关接口

创建窗口:cv2.namedWindow

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

cv2.resizeWindow("My Window", 640, 480)

参数说明:

窗口名称:这是之前使用 cv2.namedWindow 创建的窗口的标题。它是一个字符串,用于标识要调整大小的窗口。
宽度:这是你希望设置的新窗口的宽度,以像素为单位。
高度:这是你希望设置的新窗口的高度,以像素为单位。

显示图像:cv2.imshow

cv2.imshow("My Image", image)

参数说明:

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

注意:如果在调用 cv2.imshow 之前没有创建窗口(使用 cv2.namedWindow),OpenCV 会自动创建一个窗口。但是,如果想要设置窗口的属性,比如可调整大小,需要在显示图像之前显式地创建窗口。

**注意:**必须要与cv2.waitKey函数配套调用,如果不调用 cv2.waitKey,可能会造成窗口无响应或崩溃

等待输入:cv2.waitKey

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

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

参数说明:

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

返回值:

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

销毁所有窗口:cv2.destroyAllWindows

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

cv2.destroyAllWindows()

销毁指定窗口:cv2.destroyWindow

cv2.destroyWindow('Window Name')  # 关闭指定名称的窗口

参数说明:

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

**注意:**cv2.destroyAllWindows 和 cv2.destroyWindow 只会影响 OpenCV 创建的窗口

图片相关接口

读取图像:cv2.imread

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

image = cv2.imread(filename, flags)

参数说明:

filename:一个字符串,表示要读取的图像文件的路径。这个路径可以是相对路径或绝对路径。
flags(可选) :这是一个可选参数,用于指定如何读取图像。常用的标志包括:

cv2.IMREAD_COLOR:加载彩色图像。任何图像的透明度将被忽略。
cv2.IMREAD_GRAYSCALE:以灰度模式加载图像。
cv2.IMREAD_UNCHANGED:包括图像的alpha通道加载图像。也就是说,加载图像的同时保留图像的透明度。

保存一个图像:cv2.imwrite

用于将图像保存到文件中

result = cv2.imwrite(filename, image)

参数说明:

filename:一个字符串,表示要保存的图像文件的路径。这个路径可以是相对路径或绝对路径。文件扩展名决定了图像的保存格式,例如 .jpg、.png、.bmp 等。
image:一个 NumPy 多维数组,通常是通过 OpenCV 的其他函数处理过的图像数据。数组的数据类型和形状取决于图像的通道数和深度。

返回值:

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

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

视频/摄像头相关接口

显示视频:cv2.VideoCapture

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

cap = cv2.VideoCapture(filename_or_index)

参数说明:

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

返回值:

VideoCapture 对象

VideoCapture 类的主要方法

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

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

捕获下一帧:read()
 ret, frame = cap.read()

返回值:

返回一个布尔值和一个帧。如果读取成功,返回 True 和当前的帧;如果读取失败或到达视频末尾,返回 False 和一个空帧。

获取视频流的某个属性:get()
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)
set(propId, value)

同上

关闭视频流并释放资源:release()
cap.release()

注意:

在使用 VideoCapture 对象后,应该调用 release() 方法来释放资源,特别是在使用摄像头时。
read() 方法可能会因为各种原因失败,比如文件不存在、权限问题或设备问题。因此,每次调用 read() 后都应该检查返回的布尔值。
如果视频文件或摄像头的帧率很高,可能需要使用 cv2.waitKey 来控制帧的显示速度,以避免视频播放过快。

录制视频

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

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

fourcc = cv2.VideoWriter_fourcc(*'XVID')

参数说明:

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

DIVX:用于 DivX 编解码器
XVID:用于 Xvid 编解码器
H264:用于 H.264 编解码器
MJPG:用于 Motion JPEG 编解码器
MP4V:用于 MPEG-4 编解码器

创建videoWriter对象: cv2.VideoWriter

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

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() 方法来释放资源并正确关闭视频文件。

out.write(frame)

参数说明:

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

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

返回值:

如果在写入过程中出现错误,out.write(frame) 可能会返回 False。因此,在实际应用中,你可能需要检查返回值并相应地处理错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/737095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux第12章 - 网络管理

Linux系统配置及服务管理_第12章 网络管理 简介 Linux网络接口名称规则 Network interface names Traditionally, network interfaces in Linux are enumerated as eth0, eth1, eth2, and so on. However, the mechanism which sets these names can cause changes to which in…

【Android KOOM】KOOM Java层泄漏使用全解析

文章目录 前言初始化OOMMonitormake leak日志查看&堆快照输出源码分析篇 前言 要研究内存泄漏框架,KOOM是个不可忽略的优秀开源框架,由快手开源。这将是一个系列的文章。这篇文章作为开篇,来看看KOOM框架的demo是怎么制造Java层面的leak…

C++的类与对象(三):构造函数、析构函数、对象的销毁顺序

目录 类的6个默认成员函数 构造函数 语法 特性 析构函数 特性 对象的销毁顺序​​​​​​​​​​​​​​ 类的6个默认成员函数 问题:一个什么成员都没的类叫做空类,空类中真的什么都没有吗? 基本概念:任何类在什么都不…

软考73-上午题-【面向对象技术2-UML】-UML中的图4

一、构件图(组件图) 1-1、构件图的定义 展现了,一组构件之间的组织和依赖。 构件图专注于系统的静态实现图。 构件图与类图相关,通常把构件映射为一个、多个类、接口、协作。 【回顾】: 类图展示了一组对象、接口、…

题目 2146: 组合的输出

题目描述: 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。 现要求你用递归的方法输出所有组合。 例如n&…

SpringCloud-SpringBoot读取Nacos上的配置文件

在 Spring Boot 应用程序中,可以使用 Spring Cloud Nacos 来实现从 Nacos 服务注册中心和配置中心读取配置信息。以下是如何在 Spring Boot 中读取 Nacos 上的配置文件的步骤: 1. 引入依赖 首先,在 Spring Boot 项目的 pom.xml 文件中添加 …

深入探索Java设计模式:责任链模式解析与实践

目录 一、责任链模式的基础知识1. 模式结构2. 模式示例 二、责任链模式的实际应用1. 请求处理链2. 日志记录器 三、责任链模式的重要性和使用场景结语 欢迎阅读本篇博客,我们将深入探讨Java设计模式中的责任链模式,帮助初学者、初中级程序员和在校大学生…

Android Kotlin知识汇总(一)编程语言

在 2019 年 Google I/O 大会上宣布今后将优先采用 Kotlin 进行 Android 开发。Kotlin 是一种富有表现力且简洁的编程语言,不仅可以减少常见代码错误,还可以轻松集成到现有应用中。如果您想构建 Android 应用,建议您从 Kotlin 开始着手&#x…

分享axios+signalr简单封装示例

Ajax Axios Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。 从浏览器创建 XMLHttpReque…

MySQL-QA-异常问题及解决方案(持续更新)

MySQL-Q&A(持续更新) 1.1 PID文件找不到 问题描述 错误详情: ERROR!The server quit without updating PID file (/usr/local/mysql/data/localhost.localdomain.pid) 解决方案 首先排查配置文件,一般路径为:/etc/my.cnf 检查…

Python 利用Pydantic模块提升开发效率

文章目录 Pydantic 核心概念pydantic 核心功能BaseModel 模型Field 类Config 类基础类型验证必填字段验证长度验证大小验证枚举值验证容器验证自定义验证器嵌套模型JSON 数据导入ORM 数据导入总结 Pydantic 核心概念 Pydantic 是一个数据验证和设置管理库,它的核心概…

D2力扣滑动窗口系列

滑动窗口算法(Sliding Window): 滑动窗口算法(Sliding Window):在给定数组 / 字符串上维护一个固定长度或不定长度的窗口。可以对窗口进行滑动操作、缩放操作,以及维护最优解操作。 滑动操作&am…

【Ubuntu】gonme桌面的 gdm 和 lightdm 区别

总结:都可以 gdm: 【Gnome Display Manager】 完整,体积大 lightdm: 【Light Display Manager】 轻量

甜甜圈和贪吃蛇的后续

代码复现-项目复现 代码复现 云课五分钟-02第一个代码复现-终端甜甜圈C-CSDN博客 项目复现 云课五分钟-03第一个开源游戏复现-贪吃蛇-CSDN博客 不同的地图 加入班级和标识 循序渐进 这些案例都是来源网络,只是方便熟悉一下云课使用过程。 此部分学生掌握情况非…

OpenCV 图像的几何变换

一、图像缩放 1.API cv2.resize(src, dsize, fx0,fy0,interpolation cv2.INTER_LINEAR) 参数: ①src :输入图像 ②dsize:绝对尺寸 ③fx,fy:相对尺寸 ④interpolation:插值方法 2.代码演示 import cv2 …

携手亚信安慧AntDB,在数智化浪潮中乘风破浪

随着大数据时代的到来,对数据库的需求愈发强烈。在这一背景下,国产数据库逐渐崭露头角,亚信安慧AntDB作为重要的代表产品之一正积极参与到激烈的市场竞争中。亚信安慧AntDB不仅追求技术的革新和突破,同时也致力于满足用户日益增长…

AVCE - AV Evasion Craft Online 更新 8 种加载方式 - 过 WD 等

免责声明:本工具仅供安全研究和教学目的使用,用户须自行承担因使用该工具而引起的一切法律及相关责任。作者概不对任何法律责任承担责任,且保留随时中止、修改或终止本工具的权利。使用者应当遵循当地法律法规,并理解并同意本声明…

2023年中国高校大数据挑战赛D题参考论文发布(全网首发)

腾讯文档】2023年大数据挑战赛资料说明 https://docs.qq.com/doc/DSEpWUVFySm1ObFB0 基于数据分析的行业职业技术培训能力评价 摘要 中国是制造业大国,产业门类齐全,每年需要培养大量的技能娴熟的技术工人进入工厂。本文将基于题目给出的数据&#x…

VuePress使用

1、创建项目 参考官网创建 参考文章

Java——正则表达式详解

目录 Java正则表达式1、正则表达式语法1.1、基本的元字符1.2、数量元字符1.3、位置元字符1.4、特殊字符元字符1.5、回溯引用和前后查找1.6、大小写转换1.7、匹配模式 2、Java中的正则表达式2.1、概述2.2、获取匹配位置2.3、捕获组 3、匹配单个字符3.1、匹配纯文本3.2、匹配任意…