前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >独家|OpenCV 1.3 矩阵的掩膜操作(附链接)

独家|OpenCV 1.3 矩阵的掩膜操作(附链接)

作者头像
数据派THU
发布于 2023-03-29 05:17:25
发布于 2023-03-29 05:17:25
66400
代码可运行
举报
文章被收录于专栏:数据派THU数据派THU
运行总次数:0
代码可运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
翻译:陈之炎
校对:王可汗、林夕
本文约1600字,建议阅读5分钟本文为大家介绍了 OpenCV 矩阵的官方教程。

矩阵的掩膜操作(mask)并不难。主要思路为:根据掩膜矩阵(也称为内核kernel)重新计算图像中每个像素的值。利用掩膜矩阵调整相邻像素对当前像素值的影响。从数学的角度来看,即是利用特定的权重值,对像素做一个加权平均。

测试案例

来看一下如何增强图像对比度的示例,按照以下公式重新计算图像各个像素:

第一种是利用公式做计算,而第二种是第一种使用mask来计算的简化版本。需要计算的像素对准掩膜矩阵的中心,将像素值和掩膜矩阵的值相加后求和。对于较大的图像来说,操作也是相同,后者的表述更容易被理解。

代码

可以到这里下载源代码,或者到以下目录中查看OpenCV的源代码示例库。

基本方法

接下来看下,如何通过两种方法来实现上述功能。一是使用获取像素值的基本方法,另一个是使用filter2D函数。

该函数的功能如下:

首先,应确保输入图像的数据类型是无符号的字符格式(unsigned char),当内部表达发生错误时,使用 cv::CV_Assert函数来报错。

cv::CV_Assert函数

https://docs.opencv.org/4.5.2/db/de0/group__core__utils.html

创建一个与输入图像尺寸和数据类型均相同的输出图像。正如在存储部分所述,这需要根据通道的数量和子列的数目来定。依据以上两个数目,通过指针的迭代,遍历像素矩阵中的所有元素。

利用普通的C操作符[]存取像素,由于需要在同一时间需要访问多个行,所以必须获取多个行的指针(前一行,当前行和下一行),同时还需要用另一个指针指向存储计算值的地方。然后,只需利用操作符 []来访问像素,只要在每次操作之后,简单地将输出指针增加一个字节,便能方便地移动输出指针。

在图像的边界上,会有不存在的像素位置(如(-1)—(-1)),在这种情况下,公式未作出明确的定义,最为简单的解决方案是不对这些点使用内核,边界的像素值设置为0:

filter2D函数

图像处理过程中,滤波器应用得非常普遍,在OpenCV中,有一个应用掩膜矩阵(在某些地方称之为内核)的函数。首先需要定义一个保存掩膜矩阵的对象:

然后调用filter2D()函数,指定输入图像、输出图像和所使用的内核:

该函数第五个参数为可选的参数,用来指定内核的中心;第六个参数用于在存储滤波像素之前,为其添加一个可选值;第七个参数用于确定对未定义的区域(边界)做什么操作。这个函数比较短小简洁,通过优化之后,速度要比hand-coded方法快。例如,在本项测试中,hand-coded方法花了约31毫秒时间,而第一种方法只用了13毫秒的时间,二者之间颇有些差异。

例如:

可以在YouTube上观看示例程序的运行视频。

注:本文以C++语言代码为例,获取Java和python版本可在原文中查看:

https://docs.opencv.org/4.5.2/d7/d37/tutorial_mat_mask_operations.html

编辑:于腾凯

校对:王欣

下一小节:1.4 对图像的操作

往期回顾:

独家|OpenCV 1.1 Mat - 基本图像容器(附链接)

独家|OpenCV 1.2 如何用OpenCV扫描图像、查找表和测量时间(附链接)

译者简介

陈之炎,北京交通大学通信与控制工程专业毕业,获得工学硕士学位,历任长城计算机软件与系统公司工程师,大唐微电子公司工程师,现任北京吾译超群科技有限公司技术支持。目前从事智能化翻译教学系统的运营和维护,在人工智能深度学习自然语言处理(NLP)方面积累有一定的经验。业余时间喜爱翻译创作,翻译作品主要有:IEC-ISO 7816、伊拉克石油工程项目、新财税主义宣言等等,其中中译英作品“新财税主义宣言”在GLOBAL TIMES正式发表。能够利用业余时间加入到THU 数据派平台的翻译志愿者小组,希望能和大家一起交流分享,共同进步

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

点击“阅读原文”拥抱组织

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据派THU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
独家|OpenCV 1.2 如何用OpenCV扫描图像、查找表和测量时间(附链接)
翻译:陈之炎 校对:张一然、林夕 本文约4400字,建议阅读10分钟本文为大家系统地介绍了OpenCV官方教程。 目标 在这里将寻求以下问题的答案: 如何遍历图像的各个像素? OpenCV的矩阵值是如何存储的? 如何衡量算法的性能? 什么是查找表,为什么要使用查找表? 测试案例 首先来考虑一个简单的减色方法。利用C和C ++的无符号字符(unsigned char)数据类型来存储矩阵项,像素的一个通道可以具备256个不同的值。对于一幅三通道的图像来说,可以构造出多种色彩(色彩数量可达16,000,000种)
数据派THU
2023/03/29
9310
独家|OpenCV  1.2 如何用OpenCV扫描图像、查找表和测量时间(附链接)
独家|OpenCV 1.4 对图像的操作
翻译:陈之炎 校对:吴振东 本文约2400字,建议阅读5分钟本文为大家系统地介绍了OpenCV对图像的操作。 图像的输入/输出 从文件中加载图像: 如果读入的是一个JPG文件,默认状态下会创建一个3通道图像。如果你需要将其制成灰度图像,则使用以下代码: 注 文件格式由其内容(前几个字节)确定。将图像保存为一个文件: 注 文件的格式由其扩展名确定。 用CV :: imdecode和CV :: imencode从内存中读取和写入图像。 基本的图像操作 访问像素亮度值 为了获取像素亮度值,首先必须知道图像的
数据派THU
2023/03/29
8930
独家|OpenCV 1.4 对图像的操作
独家|OpenCV 1.5 利用OpenCV叠加(混合)两幅图像
翻译:陈之炎 校对:顾伟嵩 本文约1300字,建议阅读5分钟在这里将学习如何叠加两幅图像! 目标 在本教程中,你将学习以下内容: 什么是线性叠加?为什么它非常有用; 如何利用 addWeighted()函数叠加两幅图像。 理论 注 下述解释援引自理查德·斯泽利斯基(Richard Szeliski)的《计算机视觉算法和应用》一书。 从以前的教程中,我们已经学习了一些像素的操作。线性叠加操作符是一个比较有趣的二元(双输入)运算符: 通过改变α的取值(从0→1),此操作符可执行两幅图像或视频之间时间交叉叠加,
数据派THU
2023/03/29
8790
独家|OpenCV 1.5 利用OpenCV叠加(混合)两幅图像
独家|OpenCV 1.7 离散傅里叶变换
翻译:陈之炎 校对:李海明 本文约2400字,建议阅读5分钟本文为大家介绍了OpenCV离散傅里叶变换。 目标 本小节将寻求以下问题的答案: 什么是傅立叶变换,为什么要使用傅立叶变换? 如何在OpenCV中使用傅立叶变换? copyMakeBorder() , merge() , dft() , getOptimalDFTSize() , log() 和 normalize() 等函数的使用方法。 源代码 可以到 samples/cpp/tutorial_code/core/discrete_fo
数据派THU
2023/03/29
9630
独家|OpenCV 1.7 离散傅里叶变换
独家|OpenCV1.9 如何利用OpenCV的parallel_for_并行化代码(附代码)
翻译:陈之炎 校对:顾伟嵩 本文约3200字,建议阅读7分钟本教程的目标是展示如何使用OpenCV的parallel_for_框架轻松实现代码并行化。 目标 本教程的目标是展示如何使用OpenCV的parallel_for_框架轻松实现代码并行化。为了说明这个概念,我们将编写一个程序,利用几乎所有的CPU负载来绘制Mandelbrot集合。完整的教程代码可见原文。如果想了解更多关于多线程的信息,请参考本教程中提及的参考书或课程。 预备条件 首先是搭建OpenCV并行框架。在OpenCV3.2中,可以按此顺序
数据派THU
2023/03/29
1K0
独家|OpenCV1.9 如何利用OpenCV的parallel_for_并行化代码(附代码)
独家|OpenCV 1.1 Mat - 基本图像容器(附链接)
翻译:陈之炎 校对:吴振东、林夕 本文约3600字,建议阅读10分钟本文为大家系统地介绍了OpenCV官方教程。 写在前边 让读者朋友们较为系统地了解和学习OpenCV官方教程,数据派THU翻译组联合研究部共同推出OpenCV官方教程翻译系列。由于所列章节较多,教程将被分为多篇文章持续更新发布。 原文链接:https://docs.opencv.org/4.5.2/de/d7a/tutorial_table_of_content_core.html 目标 我们可以通过多种方式从现实世界中获取数字图像,比如:
数据派THU
2023/03/29
7450
独家|OpenCV 1.1 Mat - 基本图像容器(附链接)
独家|OpenCV1.8 使用XML和YAML文件实现文件的输入/输出
翻译:陈之炎 校对:李海明 本文约2400字,建议阅读5分钟本文为大家介绍了OpenCV使用XML和YAML文件实现的输入输出。 目标 本小节将回答以下问题: 如何使用YAML或XML文件打印和读取文本输入到文件和OpenCV? 如何对OpenCV数据结构做相同的操作? 如何为自定义的数据结构做相同的操作? OpenCV中cv::FileStorage , cv::FileNode 和 cv::FileNodeIterator 的数据结构和使用方法。 源代码 C ++ 可以在原文下载源代码,也可以在
数据派THU
2023/03/29
1K0
独家|OpenCV1.8 使用XML和YAML文件实现文件的输入/输出
OpenCV图像处理03-矩阵的掩膜操作
03-矩阵的掩膜操作 #include<opencv2/opencv.hpp> #include<iostream> #include<math.h> using namespace std; using namespace cv; int main() { Mat src, dst; src = imread("D:\\heroRcData\\opencvProject\\arrowImg\\01\\01.jpg"); if (!src.data) { cout << "could not lo
yangjiao
2021/03/04
3340
独家 | CodeGPT:具有类ChatGPT功能的VSCode扩展
作者:The PyCoach‍翻译:陈之炎校对:赵鉴开 本文约1300字,建议阅读7分钟本文为你介绍在VSCode中使用GPT-3的官方OpenAI API。 用Canva制作图片 我并非VSCode的忠实粉丝,但不得不承认,它比我每天使用的代码编辑器有更多有用的扩展。 其中一个扩展是CodeGPT。这个扩展允许我们通过官方的OpenAI API在VSCode中调用GPT-3,如同在代码编辑器中有了ChatGPT一样! 使用CodeGPT可以生成代码、解释代码、重构代码等等。让我们来看看如何设置它,并探索
数据派THU
2023/04/08
2.6K0
独家 | CodeGPT:具有类ChatGPT功能的VSCode扩展
独家 | 在PyTorch中用图像混合(Mixup)增强神经网络(附链接)
作者:Ta-Ying Cheng翻译:陈之炎校对:车前子 本文约2000字,建议阅读5分钟随机混合图像,效果是不是会更好?
数据派THU
2021/07/16
3.5K0
独家 | 如何跳出编程这个坑
作者:Justin McClain 翻译:陈之炎校对:王可汗 本文约1000字,建议阅读5分钟本文介绍了程序员职业发展中常见的“坑”。
数据派THU
2021/10/19
3460
独家 | 如何利用ChatGPT自动完成6个数据科学领域的任务
作者:Ahmed Besbes 翻译:陈之炎 校对:赵茹萱 本文约1400字,建议阅读7分钟本文将用一些涉及机器学习和软件工程的编程问题来挑战ChatGPT。 ChatGPT仿佛是Google、StackOverflow和Readthedocs三者的组合体。 图片由James A. Molnar在“Unsplash”杂志上提供 或许,你已经听说过ChatGPT了。 这是一款由OpenAI开发的新型人工智能聊天机器人,OpenAI是GPT-3、DALL.E2及其他产品的幕后开发公司。 ChatGPT横空出世
数据派THU
2023/03/29
6000
独家 | 如何利用ChatGPT自动完成6个数据科学领域的任务
独家 | 2022 年十项突破性技术
作者:Keysight 翻译:陈之炎校对:zrx 本文约2000字,建议阅读5分钟本文为你介绍2022年十项突破性技术。 标签:突破性技术 口令密码的终结 过去的几十年里,通过网络工作时,往往需要输入口令密码,新的身份验证形式最终将会让我们永远摆脱口令密码,使用电子邮件、推送通知或生物识别扫描等全新的身份验证方式,不仅更加便捷,而且会更加安全。 COVID 变体跟踪 COVID大流行给基因组测序带来了前所未有的机遇,基因组测序能力在全球范围得到了提升和拓展。先进的基因组监测使科学家能够追踪冠状病毒的传播,
数据派THU
2022/05/25
3560
独家 | 2022 年十项突破性技术
独家 | 9个可以显著优化代码的Python内置装饰器
作者:Yang Zhou 翻译:陈之炎 校对:赵茹萱 本文约2000字,建议阅读8分钟本文介绍了精心挑选的9个函数装饰器,它将展示Python的优雅。 函数装饰器有事半功倍的力量。 Wallhaven 提供 图片 “简胜于繁。” Python函数装饰器是“Python zen”哲学的最佳特性。 装饰器助力用更少、更简单的代码来实现复杂的逻辑,并在其他地方实现重用。 有许多很棒的内置Python装饰器使编码变得更为容易,只使用一行代码便可向当前的函数或类中添加复杂的函数。 行胜于言,接下来,来看看精心挑选的
数据派THU
2023/03/29
5090
独家 | 9个可以显著优化代码的Python内置装饰器
独家 | 处理非均衡数据的7种技术
在这些领域的数据通常只占有总数据量不到1%,为罕见但“有趣的”事件(例如,骗子使用信用卡、用户点击广告或入侵服务器扫描其网络)。然而,绝大多数机器学习算法并不能很好地处理这些非均衡的数据集。利用以下七种技术可以通过训练一个分类器来检测出上述异常类。
数据派THU
2023/03/29
3330
独家 | 处理非均衡数据的7种技术
独家 | 兼顾速度和存储效率的PyTorch性能优化(2022)
作者:Jack Chih-Hsu Lin翻译:陈之炎校对:王紫岳 本文约4600字,建议阅读9分钟18个必须知道的PyTorch提速秘籍:工作原理和方法。 调整深度学习管道如同找到合适的齿轮组合(图片来源:Tim Mossholder) 为什么要阅读本博? 深度学习模型的训练/推理过程涉及到多个步骤。在时间和资源受限的情况下,实验迭代速度越快,越能优化模型的预测性能。本博收集整理了些许能够最大限度提高内存效率以及最小化运行时间的PyTorch的技巧和秘籍。但为了更好地利用这些技巧,我们还需要了解它的工
数据派THU
2022/09/07
1.7K0
独家 | 兼顾速度和存储效率的PyTorch性能优化(2022)
独家 | 手把手教你用Python创建简单的神经网络(附代码)
本文共2000字,建议阅读9分钟。 本文将为你演示如何创建一个神经网络,带你深入了解神经网络的工作方式。
数据派THU
2018/12/25
7010
独家 | 手把手教你用Python创建简单的神经网络(附代码)
独家 | 感悟注意力机制
作者:Greg Mehdiyev, Ray Hong, Jinghan Yu, Brendan Artley翻译:陈之炎校对:ZRX 本文约2800字,建议阅读12分钟本文由Simon Fraser大学计算机科学专业硕士生撰写并维护,同时这也是他们课程学分的一部分。 本博由Simon Fraser大学计算机科学专业硕士生撰写并维护,同时这也是他们课程学分的一部分。 想了解更多关于该项目的信息,请访问: sfu.ca/computing/mpcs 简介 看到这张照片时,首先映入眼帘的是什么?相信大多数人的眼
数据派THU
2022/03/04
4360
独家 | 三个经典强化学习算法中重大缺陷(及如何修复)
诸如Q-learning和REINFORCE等强化学习算法问世已经几十年了,教科书仍然广泛围绕它们。然而这些算法暴露出的一些根本的缺陷,极大地增加了一个良好策略进行学习的难度。
数据派THU
2023/03/29
9370
独家 | 三个经典强化学习算法中重大缺陷(及如何修复)
独家 | 如何在GPU资源受限情况下微调超大模型
作者:Stanislav Belyasov 翻译:陈之炎校对:赵茹萱 本文约4000字,建议阅读8分钟本文给出了高效使用内存的关键概念,它适用于多种艰巨的任务。 在训练模型过程中,细数那些完胜“CUDA 内存出错..”报错的提高内存效率技术。 提问:模型大小超过GPU 容量怎么办?  本文的灵感来自于Yandex数据分析学院教授的“高效深度学习系统”课程。 预备知识:假设读者已经了解神经网络的前传递和后向传递的工作原理,这对理解本文内容至关重要。文中使用PyTorch作为框架。 开始吧! 当试图使用大型模
数据派THU
2022/08/29
2.5K0
独家 | 如何在GPU资源受限情况下微调超大模型
推荐阅读
相关推荐
独家|OpenCV 1.2 如何用OpenCV扫描图像、查找表和测量时间(附链接)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文