OpenCV的常用函数

2023-11-06

1.imread函数

首先,我们看imread函数,可以在OpenCV官方文档中查到其原型如下:

Mat imread(const string& filename, int flags=1 );

其中,第一个参数,const string&类型的filename,填我们需要载入的图片路径名。
在Windows操作系统下,OpenCV的imread函数支持如下类型的图像载入:

JPEG文件 - *.jpeg, *.jpg, *.jpe
JPEG 2000文件- *.jp2
PNG图片 - *.png
便携文件格式- *.pbm, *.pgm, *.ppm
Sun rasters光栅文件 - *.sr, *.ras
TIFF 文件 - *.tiff, *.tif
Windows位图 - .bmp,.dib
第二个参数,int类型的flags,为载入标识,它指定一个加载图像的颜色类型。可以看到它自带缺省值1.所以有时候这个参数在调用时我们可以忽略,在看了下面的讲解之后,我们就会发现,如果在调用时忽略这个参数,就表示载入三通道的彩色图像。

可以在OpenCV中标识图像格式的枚举体中取值。通过转到定义,我们可以在higui_c.h中发现这个枚举的定义是这样的:

enum
{
/* 8bit, color or not /
CV_LOAD_IMAGE_UNCHANGED =-1,
/
8bit, gray /
CV_LOAD_IMAGE_GRAYSCALE =0,
/
?, color /
CV_LOAD_IMAGE_COLOR =1,
/
any depth, ? /
CV_LOAD_IMAGE_ANYDEPTH =2,
/
?, any color */
CV_LOAD_IMAGE_ANYCOLOR =4
};

相应的解释:

CV_LOAD_IMAGE_UNCHANGED,这个标识在新版本中被废置了,忽略。
CV_LOAD_IMAGE_ANYDEPTH- 如果取这个标识的话,若载入的图像的深度为16位或者32位,就返回对应深度的图像,否则,就转换为8位图像再返回。
CV_LOAD_IMAGE_COLOR- 如果取这个标识的话,总是转换图像到彩色一体
CV_LOAD_IMAGE_GRAYSCALE- 如果取这个标识的话,始终将图像转换成灰度1
如果输入有冲突的标志,将采用较小的数字值。比如CV_LOAD_IMAGE_COLOR | CV_LOAD_IMAGE_ANYCOLOR 将载入3通道图。

如果想要载入最真实的图像,选择CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR。

因为flags是int型的变量,如果我们不在这个枚举体中取值的话,还可以这样来:

flags >0返回一个3通道的彩色图像。
flags =0返回灰度图像。
flags <0返回包含Alpha通道的加载的图像。
需要注意的点:输出的图像默认情况下是不载入Alpha通道进来的。如果我们需要载入Alpha通道的话呢,这里就需要取负值。

如果你搞怪,flags取1999,也是可以的,这时就表示返回一个3通道的彩色图像。

2.namedWindow函数

顾名思义,namedWindow函数,用于创建一个窗口。函数原型是这样的:

void namedWindow(const string& winname,int flags=WINDOW_AUTOSIZE );
第一个参数,const string&型的name,即填被用作窗口的标识符的窗口名称。

第二个参数,int 类型的flags ,窗口的标识,可以填如下的值:

WINDOW_NORMAL设置了这个值,用户便可以改变窗口的大小(没有限制)
WINDOW_AUTOSIZE如果设置了这个值,窗口大小会自动调整以适应所显示的图像,并且不能手动改变窗口大小。
WINDOW_OPENGL 如果设置了这个值的话,窗口创建的时候便会支持OpenGL。

函数剖析:

首先需要注意的是,它有默认值WINDOW_AUTOSIZE,所以,一般情况下,这个函数我们填一个变量就行了。

namedWindow函数的作用是,通过指定的名字,创建一个可以作为图像和进度条的容器窗口。如果具有相同名称的窗口已经存在,则函数不做任何事情。

我们可以调用destroyWindow()或者destroyAllWindows()函数来关闭窗口,并取消之前分配的与窗口相关的所有内存空间。

但话是这样说,其实对于代码量不大的简单小程序来说,我们完全没有必要手动调用上述的destroyWindow()或者destroyAllWindows()函数,因为在退出时,所有的资源和应用程序的窗口会被操作系统会自动关闭。

3.imshow函数

在指定的窗口中显示一幅图像。

void imshow(const string& winname, InputArray mat);
■ 第一个参数,const string&类型的winname,填需要显示的窗口标识名称。

■ 第二个参数,InputArray 类型的mat,填需要显示的图像。

imshow 函数详解:

imshow 函数用于在指定的窗口中显示图像。如果窗口是用CV_WINDOW_AUTOSIZE(默认值)标志创建的,那么显示图像原始大小。否则,将图像进行缩放以适合窗口。而imshow 函数缩放图像,取决于图像的深度:

如果载入的图像是8位无符号类型(8-bit unsigned),就显示图像本来的样子。
如果图像是16位无符号类型(16-bit unsigned)或32位整型(32-bit integer),便用像素值除以256。也就是说,值的范围是[0,255 x 256]映射到[0,255]。
如果图像是32位浮点型(32-bit floating-point),像素值便要乘以255。也就是说,该值的范围是[0,1]映射到[0,255]。

4、输出图像到文件——imwrite函数

在OpenCV中,输出图像到文件,我们一般都用imwrite函数,它的声明如下:

bool imwrite(const string& filename,InputArray img, const vector& params=vector() );
第一个参数,const string&类型的filename,填需要写入的文件名就行了,带上后缀,比如,“123.jpg”这样。

■ 第二个参数,InputArray类型的img,一般填一个Mat类型的图像数据就行了。

■ 第三个参数,const vector&类型的params,表示为特定格式保存的参数编码,它有默认值vector(),所以一般情况下不需要填写。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV的常用函数 的相关文章

  • 如何使用 cython 编译扩展?

    我正在尝试从示例页面编译一个简单的 cython 扩展here http docs cython org src userguide tutorial html在我安装了 Python 2 6 64 位版本的 Windows 7 64 位计
  • 没有任何元数据的 zip 文件

    我想找到一种简单的方法来压缩一堆文件 而无需任何文件元数据 例如时间戳 这zip命令似乎总是保留元数据 我没有找到禁用元数据的方法 我希望解决方案是一个命令或最多一个 python 脚本 谢谢 正如一些帖子已经指出的那样 zip 标头中的大
  • 在 Python 中使用 Selenium 处理“接受 Cookie”弹出窗口

    我一直在尝试用硒抓取这个房地产网站的一些信息 但是 当我访问该网站时 我需要接受 cookie 才能继续 这仅在机器人访问网站时发生 而不是在我手动执行时发生 当我尝试通过 xpath 或 id 查找相应的元素时 正如我在手动检查页面时找到
  • 行未从树视图复制

    该行未在树视图中复制 我在按行并复制并粘贴到未粘贴的任何地方后制作了弹出复制 The code popup tk Menu tree opportunity tearoff 0 def row copy item tree opportun
  • on_delete=models.PROTECT 和 on_delete=models.CASCADE 在 Django 模型上有什么作用?

    我对 Django 很熟悉 但最近注意到有一个on delete models CASCADE and on delete models PROTECT模型的选项 on delete models CASCADE and on delete
  • python 中分割字符串以获得一个值?

    需要帮助 假设我在名为 input 的变量中有一个字符串 Sam Person name kind input split 通过执行上述操作 我得到两个具有不同字符串 Sam 和 Person 的变量 有没有办法只获取第一个值 name S
  • 可以在 TensorFlow 中使用排名相关作为成本函数吗?

    我正在处理偶尔充满异常值的极其嘈杂的数据 因此我主要依靠相关性来衡量我的神经网络的准确性 是否可以明确使用诸如等级相关性 斯皮尔曼相关系数 之类的东西作为我的成本函数 到目前为止 我主要依赖 MSE 作为相关性的代理 我现在面临三个主要障碍
  • 如何从 Dockerfile 安装 Python 3.7 和 Pip

    我正在尝试构建基于 Ubuntu 18 04 的自定义 Docker 映像 Ubuntu 预装了 Python 3 6 但我想 1 安装 Python 3 7 2 将其设置为默认 Python 版本 这样就可以使用python代替pytho
  • sudo pip install python-Levenshtein 失败,错误代码 1

    我正在尝试在 Linux 上安装 python Levenshtein 库 但每当我尝试通过以下方式安装它时 sudo pip install python Levenshtein 我收到此错误 命令 usr bin python c 导入
  • 定义函数后对其进行修饰?

    I think答案是否定的 但我似乎找不到明确的说法 我有以下情况 def decorated function function functools wraps function def my function print Hello s
  • 如何在 Python 中将彩色输出打印到终端?

    是否有与 Perl 等效的 Python 语言 print color red print
  • 具有多个元素的数组的真值是二义性错误吗? Python

    from numpy import from pylab import from math import def TentMap a x if x gt 0 and x lt 0 5 return 2 a x elif x gt 0 5 a
  • Python:计算数据帧列中所有行中特定字符的实例数

    我有一个包含列 toaddress ccaddress body 的数据框 df 我想迭代数据帧的索引 以获取 toaddress 和 ccaddress 字段中电子邮件地址的最小 最大和平均数量 这是通过计算这两列中每个字段中的 和 的实
  • 如何在Python和Selenium中通过标签名称或id获取元素[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Python 和 Selenium 获取输入 但它向我显示错误 我该如何解决这个错误 inputElement send keys getStock getStocklFunc 0 Error i
  • 如何列出 python PDB 中的当前行?

    在 perl 调试器中 如果重复列出离开当前行的代码段 可以通过输入命令返回到当前行 点 我无法使用 python PDB 模块找到任何类似的东西 如果我list如果我自己离开当前行并想再次查看它 似乎我必须记住当前正在执行的行号 对我来说
  • Pandas Dataframe:将包含列表的行扩展到多行,并为所有列提供所需的索引

    我在 pandas 数据框中有时间序列数据 索引为测量开始时的时间 列中包含以固定采样率记录的值列表 连续索引 列表中元素数量的差异 这是它的样子 Time A B Z 0 1 2 3 4 1 2 3 4 2 5 6 7 8 5 6 7 8
  • 查找给定节点的最高权重边

    我在 NetworkX 中有一个有向图 边缘的权重从 0 到 1 表示它们发生的概率 网络连通性非常高 所以我想修剪每个节点的边缘 只保留最高概率的节点 我不确定如何迭代每个节点并仅保留最高权重in edges在图中 有没有一个networ
  • Flask WTForms 使用变量自动填充 StringField

    我有一个表格 我想用上一页收到的信息自动填充一些字段 但如果他们想调整它 它需要是可更改的 我正在为我的 SelectField 使用动态创建的列表 但添加 StringField 并不成功 请参阅下面的我的代码 forms py clas
  • Python 3.2 中 **kwargs 和 dict 有什么区别?

    看起来Python的很多方面都只是功能的重复 除了我在 Python 中的 kwargs 和 dict 中看到的冗余之外 还有什么区别吗 参数解包存在差异 许多人使用kwargs 并通过dict作为论据之一 使用参数解包 Prepare f
  • 在 Python 模块中使用 InstaLoader

    我正在尝试使用 Instaloader 下载与主题标签相关的照片以进行图像分析 我在GitHub存储库中找到了一个全面的方法 如何在终端中执行它 但是 我需要将脚本集成到Python笔记本中 这是脚本 instaloader no vide

随机推荐

  • Vue开发技巧总结

    1 路由参数解耦 通常在组件中使用路由参数 大多数人会做以下事情 export default methods getParamsId return this route params id 在组件中使用 route 会导致与其相应路由的高
  • 【管理学】作业与思考题

    绪论 管理学的研究对象是什么 在企业管理研究基础上抽象出的一般管理理论对其他组织的管理是否也具有指导意义 管理学的研究对象是人类的管理实践 从广义上来说 管理实践包括对个体活动的 管理和对群体活动的管理 任何个人即使在从事仅与自己相关的目标
  • [Github] GitKraken 简体中文翻译补丁

    GitKraken 简体中文翻译补丁 项目地址 项目原理 本项目通过将 rogeraabbccdd GitKraken zh tw 翻译包内的繁体中文文件转化为简体中文而成 采用了 Python3 9 作为转换工具并利用 Github Ac
  • 【高性能】Linux挂载GPT硬盘

    Linux挂载GPT硬盘 硬盘分区表存储了硬盘数据块的存储方式 根据分区表 可以将主流硬盘划分为MBR和GPT格式 其中MBR支持2T以下的硬盘 GPT则是新分区表标准 能支持2T以上的硬盘 64位Linux可以兼容MBR和GPT两类硬盘
  • 吉林大学计算机系高级语言程序设计(C语言)期末题目及解答(下)

    内容简介 因为正在准备考研复试 所以计划把吉大期末的C语言题目重新刷一遍 上机 做为笔记放在这里 有需要的朋友请自提 注 持续更新 因为文章过大所以分为了上下两篇 上篇也在我的博客列表里 本文所有代码均已测试通过 未通过的会在前面标注 未通
  • java 返回文件的二进制字符串给前端

    RequestMapping value fileToStream method RequestMethod GET ApiOperation 将文件转成流传给前端 public WebResponse fileToStream HttpS
  • java jar后台启动的三种方式

    java jar启动 linux中启动 java jar 后台运行程序 直接用java jar xxx jar 当退出或关闭shell时 程序就会停止掉 以下方法可让jar运行后一直在后台运行 java jar xxx jar 说明 在末尾
  • tensorflow基础操作

    目录 数据类型 数据载体 如何创建一个tensor 创建随机数 tensor的性质 检查维度 检查tensorflow是用cpu还是gpu 将tensor格式转换成numpy格式 检查tensor的数据类型 转换tensor 将格式转换成t
  • 性能测试调研:测试的目的是什么?

    昨天讲了 性能测试 你知道什么是99线吗 今天看看第二篇性能测试调研都有哪些内容 1 测试目的 2 系统架构及业务流程 3 测试范围及业务场景 4 性能测试指标 1 测试目的 测试背景 是新系统还是旧系统改造 评估测试重点 新系统预估可能的
  • Spring ApplicationContextAware 获取bean

    Spring 获取 bean spring最重要的功能是作为bean容器 方便的提供bean的初始化和存取服务 我们使用spring 也正是为了避免自己去创建或者管理对象 因此应该尽量从spring容器中去拿bean 而不是自己去new 如
  • OpenGL的Context(Profile)

    OpenGL在渲染的时候需要一个Context 这个Context记录了OpenGL渲染需要的所有信息 可以把它理解成一个大的结构体 它里面记录了当前绘制使用的颜色 是否有光照计算以及开启的光源等非常多我们使用OpenGL函数调用设置的状态
  • 命令行卸载java_卸载java

    有小伙伴经常会遇到Java没有卸载干净的情况 造成重新安装JDK能正常安装 接着安装JRE的时候总是报1603错误 虽然说JRE安装报错了没安装上 但是eclipse IntelliJ IDEA和AndroidStudio都能正常打开和使用
  • 实时音频编解码之二编码学数学知识

    本文谢绝任何形式转载 谢谢 1 3 编码数学算法 1 3 1 定点和浮点 编码的一些参数是经过定标和量化的 然后再将其送入区间编码器进一步压缩数据量 为了降低执行编解码的内存和算力要求 Opus编码器中很多地方使用了Q定标方式将浮点数转化为
  • DTMF通信系统设计—基于MATLAB和STM32

    文章目录 1 摘要 2 设计任务 3 课程设计主要解决的问题 4 设计内容 4 1 整体设计方案 4 2 详细设计内容 5 结果与分析 5 1 基于MATLAB 的DTMF 通信系统 5 2 双机通信模拟 5 2 基于单片机的DTMF 通信
  • C语言堆排序

    堆排序 Heapsort 是一种在时间复杂度上达到了最优的基于比较的排序算法 堆排序算法是指利用堆这种数据结构所设计的一种排序算法 堆积是一个近似完全二叉树的结构 并同时满足堆积的性质 即子节点的键值或索引总是小于 或者大于 它的父节点 堆
  • 为什么想来我们公司工作?- 面试常见问题解析

    在面试的过程中 你的面试官可能会问你这样一个问题 你为什么想在我们公司工作 这是面试最常见的问题之一 这个问题看似简单 但回答时一定要提前有所准备 一般来说 面试官在面试时提问这个问题是希望通过应聘者的回答来衡量应聘者对他们公司的感兴趣程度
  • 综述:运动目标跟踪算法

    运动目标跟踪算法总结 1 传统的目标跟踪算法 运动目标跟踪 首先对目标进行有效地表达 然后在接下来的视频序列的每一帧中找到相似度与目 标最大的区域 从而确定目标在当前帧中的位置 早期的生成式方法主要有两种思路 1 依赖于目标外观模型 通过对
  • 华为2018校园招聘(提前批) 笔试 输出ascii最小的最长连续字符串

    题目 给定一串字符 里面有些字符有连续出现的特点 请寻找这些连续字符串中最长的串 如果最长的串有多个 请输出ascii最小的个 思路 利用start和end来记录当前连续出现的子字符串的起始位置 如果当前字符串长度 gt 历史最大长度或者两
  • 【OpenCV学习笔记】【算法学习】一(模板匹配)

    include
  • OpenCV的常用函数

    OpenCV的常用函数 1 imread函数 2 namedWindow函数 3 imshow函数 4 输出图像到文件 imwrite函数 1 imread函数 首先 我们看imread函数 可以在OpenCV官方文档中查到其原型如下 Ma