8.openCV 裁剪图像

12 篇文章 0 订阅
8 篇文章 1 订阅

一、使用 OpenCV 裁剪图像

在本教程的第一部分,我们将讨论如何将 OpenCV 图像表示为 NumPy 数组。由于每个图像都是一个 NumPy 数组,我们可以利用 NumPy 数组切片来裁剪图像。

使用 OpenCV 和 NumPy 数组切片理解图像裁剪

在这里插入图片描述
当我们裁剪图像时,我们想要移除我们不感兴趣的图像的外部部分。我们通常将此过程称为选择我们的兴趣区域,或者更简单地说,我们的 ROI。

我们可以通过使用 NumPy 数组切片来完成图像裁剪。

让我们首先初始化一个NumPy列表,其值范围为[ 0,24 ]:在这里插入图片描述
现在让我们将这个 1D 列表重塑为一个 2D 矩阵,假装它是一个图像:在这里插入图片描述

现在,假设我要提取从x = 0,y = 0到x = 2,y = 3的“像素” 。这样做可以使用以下代码完成:
在这里插入图片描述

注意我们是如何提取三行 ( y = 3 ) 和两列 ( x = 2

现在,让我们提取从x = 1、y = 3开始到x = 5和y = 5结束的像素

在这里插入图片描述
此结果提供图像的最后两行,减去第一列。

你注意到这里的一个模式了吗?

将 NumPy 数组切片应用于图像时,我们使用以下语法提取 ROI:

roi = image[ startY : endY , startX : endX ]

这startY : endY 提供我们numpy数组中的的行(因为y轴是我们的行数)而 startX : endX 提供图像numpy数组中的列(因为x轴是列数)

看到这里如果不太明白,建议去看一篇numpy数组切片的博文: 点此链接.去理解数组切片!

二、项目结构和代码讲解

通过博文末尾或此处的的代码下载.
下载本博文对应的代码项目,以下是下载解压后的

1.项目结构

在这里插入图片描述
我们今天只有一个 Python 脚本, opencv_crop.py,这将加载输.png 图像,然后使用 NumPy 数组切片从图像中裁剪出面部和身体。

2.代码讲解

在这里插入图片描述
第 2 行和第 3 行导入我们需要的 Python 包,而第 6-9 行解析我们的命令行参数。

我们只需要一个命令行参数, - 图像,这是我们希望裁剪的输入图像的路径。对于这个例子,我们将默认- 图像 .png 文件在我们的项目目录中。
接下来,让我们从磁盘加载我们的图像:在这里插入图片描述

第 12 和 13 行图像 然后将其显示到我们的屏幕上:在这里插入图片描述
我们的目标是使用简单的裁剪方法从该区域中提取脸和身体。

我们通常会应用物体检测技术来检测图像中我的脸和身体。然而,由于我们在 OpenCV 教育课程中还处于早期阶段,我们将使用我们对图像的先验知识并手动提供身体和面部所在的 NumPy 数组切片。

同样,我们当然可以使用对象检测方法从图像中自动检测和提取人脸

我们用一行代码(第 20 行)从图像中提取我的脸。

我们提供 NumPy 数组切片来提取图像的矩形区域,从(85, 85)开始到(220, 250)结束。

我们为作物提供索引的顺序可能看起来违反直觉;但是,请记住,OpenCV 将图像表示为 NumPy 数组,高度在前(行数),宽度在后(列数)。

为了执行我们的裁剪,NumPy 需要四个索引:

  • 起始y:起始y坐标。在这种情况下,我们从y = 85开始。
  • End y : 结束y坐标。我们将在y = 250处结束我们的作物。
  • 起始x:切片的起始x坐标。我们在x = 85处开始裁剪。
  • End x:切片的结束x轴坐标。我们的切片在x = 220处结束。
    我们可以在下面看到裁剪脸的结果:

在这里插入图片描述

同样,我们可以从图像中裁剪身体在这里插入图片描述
裁剪身体是通过从原始图像的坐标(0, 90)开始裁剪到(290, 450)结束来完成的。

您可以在下面看到使用 OpenCV 进行裁剪的输出:

在这里插入图片描述
运行代码

在这里插入图片描述

三、代码下载

代码下载.

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

·菜鸟看世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值