翻译:陈之炎
校对:王可汗、林夕本文约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】至联系邮箱,申请白名单授权并按要求编辑。

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

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

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

  1. 【OpenCV学习】第2课:图片锐化 - 矩阵的掩膜操作(卷积中的锐化算子)

    仅自学做笔记用,后续有错误会更改 理论 这里用到的掩膜,其实只是数学中卷积的概念的一个应用 上下左右4个像素值分别乘以-1,再加上中间像素值乘以5的值,最后得到的值再重新赋值给中间像素,这就是掩膜的一 ...

  2. 转载:矩阵的掩膜操作实现图像对比度调整

    矩阵的掩膜操作实现图像对比度调整 hb707934728 2017-07-04 13:54:17 1170 收藏 最后发布:2017-07-04 13:54:17首发:2017-07-04 13:54 ...

  3. OpenCV图像处理使用笔记(二)——图像矩阵的掩膜操作

    前言 1.数字图像处理中的掩膜的概念是起源于于PCB制版的过程,在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形"底片"称为掩膜(也称作"掩模" ...

  4. 独家 | 菜鸟必备的循环神经网络指南(附链接)

    作者:Victor  Zhou 翻译:王雨桐 校对:吴金迪 本文约3800字,建议阅读15分钟. 本文将介绍最基础的循环神经网络(Vanilla RNNs)的概况,工作原理,以及如何在Python中实 ...

  5. 《学习opencv》笔记——矩阵和图像操作——cvCrossProduct and cvCvtColor

    矩阵和图像的操作 (1)cvCrossProduct函数 其结构 void cvCrossProdust(//计算两个三维向量的叉积const CvArr* src1,const CvArr* src ...

  6. 《学习opencv》笔记——矩阵和图像操作——cvMax,cvMaxS,cvMerge,cvMin and cvMinS

    矩阵和图像的操作 (1)cvMax函数 其结构 void cvMax(//比较两个图像取最大值const CvArr* src1,//图像1const CvArr* src2,//图像2CvArr* ...

  7. 独家 | 机器学习数据准备技术之旅(附链接)

    作者:Jason Brownlee 翻译:李嘉骐 校对:王晓颖 本文约4300字,建议阅读9分钟 本文介绍了机器学习中常用的数据准备技术. 标签:初学者 机器学习 数据准备 特征工程 机器学习项目中的 ...

  8. 独家 | 利用AI进行高精度图像编辑︰EditGAN(附链接)

    作者︰Nathan Horrocks 翻译︰Gabriel Ng 校对:张睿毅本文约3300字,建议阅读5分钟 本文为大家介绍了如何利用AI进行高精度图像编辑. 处理猫咪.汽车.甚至是古董画的照片,对 ...

  9. 独家 | 基于癌症生存数据建立神经网络(附链接)

    作者:Jason Brownlee 翻译:wwl校对:车前子本文约4000字,建议阅读3分钟本文介绍了haberman乳腺癌生存二分类数据集,进行神经网络模型拟合.包含数据准备.MLP模型学习机制.模 ...

最新文章

  1. 使用boost解析域名服务
  2. java函数定义的要素_Java学习笔记八(方法)
  3. buu-[RoarCTF2019]polyre(控制流平坦化,虚假控制流程)
  4. 按我的理解string似乎不是字面值类型,但为什么《c++ primer》习题7.55答案说Data类是集合类呢?
  5. GDI+_VB6_ARGB
  6. 阿里云云计算 14 使用阿里云中的OSS
  7. 移动硬盘丢失数据的原因 移动硬盘数据怎么恢复回来
  8. vs2012旗舰版 有效注册密钥
  9. 常用三种正态检验方法
  10. 联想小新13pro锐龙版网卡_联想小新Pro 13标压锐龙版评测:比香还香 买就完了
  11. Drools-决策表
  12. 接口测试方法论——WebSocket一点通
  13. idea配置tomcat
  14. Linux电脑睡眠后黑屏打不开,电脑睡眠后黑屏打不开 电脑睡眠后黑屏打不开的原因...
  15. centOS之php-fpm不可用
  16. 15---Mysql的多表+事务
  17. php 蛋糕一刀均分试题,5个小朋友分一个蛋糕,只准切三刀,该怎样才能平分
  18. 从零开始学架构——架构基础
  19. 使用Vagrant部署虚拟分布式开发和测试环境
  20. qunee 开发清新、高效的拓扑图组件 http://www.qunee.com/

热门文章

  1. 建立一个按年龄排序的有序链表,每个结点包括学号、姓名、性别、年龄。建立一个新的结点,通过年龄将此结点插入到链表中去,使之仍然有序
  2. 【c语言】统计字符次数
  3. 架构之美(china-pub全国独家首发)
  4. HTML和javascript 第二天
  5. Linux内存中的 buffer 和 cache 到底是个什么东东?
  6. [轉]Webdings字体图案
  7. 2005年个人防病毒软件评测报告
  8. java hashmap 无序,【Java】HashMap自定义排序
  9. 自己一路经历的实习面试总结(希望能给看到这篇博客的小伙伴提供一些帮助)
  10. 假设训练数据集中有10万个词,四元语法需要存储多少词频和多词相邻频率?《动手学深度学习 李沐》 转