8.openCV 裁剪图像

8.openCV 裁剪图像

  • 一、使用 OpenCV 裁剪图像
  • 二、项目结构和代码讲解
    • 1.项目结构
    • 2.代码讲解
  • 三、代码下载

一、使用 OpenCV 裁剪图像

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

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

8.openCV 裁剪图像_第1张图片
当我们裁剪图像时,我们想要移除我们不感兴趣的图像的外部部分。我们通常将此过程称为选择我们的兴趣区域,或者更简单地说,我们的 ROI。

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

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

现在,假设我要提取从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.项目结构

8.openCV 裁剪图像_第3张图片
我们今天只有一个 Python 脚本, opencv_crop.py,这将加载输.png 图像,然后使用 NumPy 数组切片从图像中裁剪出面部和身体。

2.代码讲解

8.openCV 裁剪图像_第4张图片
第 2 行和第 3 行导入我们需要的 Python 包,而第 6-9 行解析我们的命令行参数。

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

第 12 和 13 行图像 然后将其显示到我们的屏幕上:8.openCV 裁剪图像_第6张图片
我们的目标是使用简单的裁剪方法从该区域中提取脸和身体。

我们通常会应用物体检测技术来检测图像中我的脸和身体。然而,由于我们在 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处结束。
    我们可以在下面看到裁剪脸的结果:

8.openCV 裁剪图像_第7张图片

同样,我们可以从图像中裁剪身体8.openCV 裁剪图像_第8张图片
裁剪身体是通过从原始图像的坐标(0, 90)开始裁剪到(290, 450)结束来完成的。

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

8.openCV 裁剪图像_第9张图片
运行代码

在这里插入图片描述

三、代码下载

代码下载.

你可能感兴趣的:(python,图像处理,opencv,python,opencv)