8.openCV 裁剪图像

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

一、使用 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 进行裁剪的输出:


运行代码

三、代码下载

代码下载.

8.openCV 裁剪图像相关推荐

  1. OpenCV入门(C++/Python)-使用OpenCV裁剪图像(四)

    裁剪是为了从图像中删除所有不需要的物体或区域.甚至突出显示图像的特定功能. 使用OpenCV裁剪没有特定的功能,NumPy数组切片是工作.读取的每个图像都存储在2D数组中(对于每个颜色通道).只需指定 ...

  2. OpenCV裁剪图像任意区域

    目录 1.获取选定图中的矩形ROI 2.裁剪任意多边形 1.获取选定图中的矩形ROI 利用矩形 Rect 框定,指定其左上角坐标(构造函数前两个参数)和矩形的 长宽(后两个参数) //定义一个 Mat ...

  3. 在Python中使用OpenCV裁剪图像

    What is Cropping? 什么是播种? Cropping is the removal of unwanted outer areas from a photographic or illu ...

  4. OpenCV基础(4)使用OpenCV裁剪图像

    首先,为什么我们需要作物?裁剪是为了从图像中移除所有不需要的物体或区域或者是突出图像的一个特殊特征. 与Numpy使用切片操作实现裁剪不同,OpenCV没有特定的函数来进行裁剪操作.读取的每个图像都存 ...

  5. Opencv 基础(三):使用OpenCV裁剪图像

    裁剪是从图像中移除所有不需要的物体或区域.甚至可以突出显示图像的特定特征. 没有使用OpenCV进行裁剪的特定函数,NumPy数组切片是做这项工作的.读取的每个图像都存储在一个2D数组中(对于每个颜色 ...

  6. 使用Python和OpenCV捕获鼠标事件,并裁剪图像

    使用Python和OpenCV捕获鼠标事件,并裁剪图像 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Python和OpenCV捕获鼠标事件.还演示了如何快速裁剪和提取图像区域,这在为自己的自 ...

  7. 【OpenCV入门】调整图像大小/裁剪图像

    调整图像大小-resize 函数resize 函数的定义 void resize( InputArray src, //输入图像OutputArray dst,//输出图像Size dsize, // ...

  8. OpenCV—Python 图像指定区域裁剪

    文章目录 一.指定图像位置的裁剪处理 二.批量处理-指定图像位置的裁剪 三.多进程(加快处理) 在工作中.在做数据集时,需要对图片进行处理,照相的图片我们只需要特定的部分,所以就想到裁剪一种所需的部分 ...

  9. python opencv 内存泄露_python - OpenCV Python裁剪图像 - 堆栈内存溢出

    您可以使用轻松在python中裁剪图像 roi = oriImage[refPoint[0][1]:refPoint[1][1], refPoint[0][0]:refPoint[1][0]] 为了得 ...

最新文章

  1. JavaWeb核心之Servlet
  2. 滚动html颜色,利用CSS设置网页滚动条颜色
  3. Flash常用快捷键大全 (hotkey)
  4. dotNet Core 3.1 使用 Aspose (部署 Docker)
  5. Servlet 客户端 HTTP 请求
  6. 基于cxf框架javaweb服务说明
  7. 【PAT】1001 害死人不偿命的(3n+1)猜想
  8. 《火星人敏捷开发手册》 2011-08-18版本发布
  9. kafka shutdown停止关闭很慢问题的解决方案
  10. MJRefresh实现刷新(使用它的Block方法)
  11. 使用 Multipath TCP 为 iOS 创建备份连接(转)
  12. lsp语言服务器,身为程序员还不知道?Xtext与LSP让一个语言服务器横扫多个IDE!-lsp文件...
  13. 【WEB端移动端】企业官网高保真Axure原型模板
  14. Tableau自定义调色板
  15. linux系统学文档pdf,Linux操作系统学习.pdf
  16. python转行成数据分析_大数据专业成热门,该如何转行做大数据分析师
  17. 快添加用用户并添加指定目录和家目录
  18. Don‘t Stop Pretraining: Adapt Language Models to Domains and Tasks
  19. Spring/SpringBoot 过滤器修改、获取http 请求request中的参数 和 response返回值,比如修改请求体和响应体的字符编码
  20. 被百度 AI 官方认证的大学,到底是什么水平?

热门文章

  1. OPC 0x00000005 问题
  2. c++敢死队问题代码(为大一而生)
  3. 关于前端更新需要清空浏览器缓存
  4. Multiplier和Finger的区别和优劣讨论
  5. 如何攥写一篇合格的开题报告
  6. 一点关于应届毕业生找工作的建议。
  7. luogu P4100 [HEOI2013]钙铁锌硒维生素
  8. 怎么用html把字写到图片上,用HTML代码在图片上写字
  9. 能转PDF格式用的在线软件
  10. Python爬虫实战之12306抢票开源