《计算机视觉算法:基于OpenCV的计算机应用开发》 —3.4 矩阵和数组级操作

举报
华章计算机 发表于 2020/02/15 15:30:19 2020/02/15
【摘要】 本节书摘来自华章计算机《计算机视觉算法:基于OpenCV的计算机应用开发》 一书中第3章,第3.4.1节,作者是[伊朗] 阿明·艾哈迈迪·塔兹赫孔迪(Amin Ahmadi Tazehkandi) ,陈靖 杨欣 译。

3.4 矩阵和数组级操作

与我们在本章中迄今为止看到的函数和算法不同,本节中的算法对图像(或矩阵)本身执行原子和整体操作,即不再以元素为单位进行操作了。回忆我们前面学过的,元素操作的经验法则是它们可以很容易地并行化,因为得到的矩阵依赖于两个图像的对应像素,而我们将要学习的函数和算法不容易并行化,因为得到的像素和值可能与它们对应的源像素几乎没有或完全没有关系,或者完全相反,结果像素可能同时依赖于部分或全部输入像素。

3.4.1 为外推法生成边界

正如你将在本章和后续章节中看到的,许多计算机视觉算法要处理的最重要问题之一是外推,简单来说,就是假设图像外部也存在像素。你可能会想,为什么要考虑不存在的像素?最简单的回答是,有许多计算机视觉算法不仅仅处理单个像素,还要处理每个像素周围的其他像素。在这种情况下,当像素位于图像的中间时,没有问题。但是对于图像边界处的像素(例如,在最上面一行),一些周围像素将落在图像之外。这正是你需要考虑外推和假设图像外部仍存在像素的原因。那么你是否简单地假设这些像素的值都为零?或许假设它们与边界像素具有相同的值更好一些?这些问题都在名为copyMakeBorder的OpenCV函数中进行处理。

copyMakeBorder函数允许我们在图像外部形成边框,并提供足够的自定义选项来处理所有可能的场景。让我们用几个简单的例子来看看copyMakeBorder函数的用法:

 image.png

如前面的示例所示,copyMakeBorder接受输入图像并生成结果图像,就像我们迄今为止学到的大多数OpenCV函数一样。此外,此函数必须传入四个整数值,表示添加到图像顶部(top)、底部(bottom)、左侧(left)和右侧(right)的像素个数。但是,这里最重要的参数是border类型参数,该参数必须是BorderTypes枚举类型的元素之一。以下是部分常用的BorderType值:

 image.png

 image.png

请注意,当BORDER_CONSTANT用作边框类型参数时,必须为copyMakeBorder函数提供额外的标量参数来表示创建的边框的常量颜色值。如果省略该值,则假定该值为零(或黑色)。下图演示了copyMakeBorder函数在我们的示例图像上执行时的输出:

 image.png

copyMakeBorder和许多其他OpenCV函数在内部使用borderInterpolate函数来计算外推的像素位置并创建不存在的像素。你不需要自己直接调用此函数,因此我们将其留给读者自行探索。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。