编辑推荐:

本文将先讨论一些图像处理,然后再继续介绍可以方便使用图像处理的不同应用程序/场景,希望对您的学习有所帮助。

本文来自于tecdat

,由火龙果软件Alice编辑、推荐。

介绍

在本教程中,我们将学习如何使用Python语言执行图像处理。我们不会局限于单个库或框架;但是,我们将最常使用的是Open

CV库。我们将先讨论一些图像处理,然后再继续介绍可以方便使用图像处理的不同应用程序/场景。

什么是图像处理?

重要的是要了解图像处理的确切含义,以及在深入了解图像处理的作用之前,图像处理在大图中的作用是什么。图像处理最常被称为“数字图像处理”,而经常使用的领域是“计算机视觉”。请勿混淆。图像处理算法和计算机视觉(CV)算法都将图像作为输入。但是,在图像处理中,输出也是图像,而在计算机视觉中,输出可能是有关图像的某些特征/信息。

我们为什么需要它?

我们收集或生成的数据大部分是原始数据,即由于多种可能的原因,不适合直接在应用程序中使用。因此,我们需要先对其进行分析,执行必要的预处理,然后再使用它。

例如,假设我们正在尝试构建cat分类器。我们的程序将图像作为输入,然后告诉我们图像是否包含猫。建立该分类器的第一步是收集数百张猫图片。一个普遍的问题是,我们抓取的所有图片都不会具有相同的尺寸/尺寸,因此在将它们输入模型进行训练之前,我们需要将所有尺寸调整/预处理为标准尺寸。

这只是图像处理对于任何计算机视觉应用必不可少的众多原因之一。

先决条件

在继续进行之前,让我们讨论一下需要了解的内容,以便轻松地学习本教程。首先,您应该掌握任何语言的基本编程知识。其次,您应该知道什么是机器学习以及它如何工作的基础,因为本文中我们将使用一些机器学习算法进行图像处理。另外,如果您在继续学习本教程之前对Open

CV有任何了解或基础知识,这将对您有所帮助。但这不是必需的。

为了遵循本教程,您一定要知道的一件事是图像在内存中的准确表示方式。每个图像由一组像素表示,即像素值矩阵。对于灰度图像,像素值的范围是0到255,它们代表该像素的强度。例如,如果您具有20

x 20尺寸的图像,则将以20x20的矩阵(总共400个像素值)表示。

如果要处理彩色图像,则应该知道它将具有三个通道-红色,绿色和蓝色(RGB)。因此,单个图像将有三个这样的矩阵。

安装

注意:由于我们将通过Python使用OpenCV,因此隐含的要求是您的工作站上已经安装了Python(版本3)。

windows

$ pip install

opencv-python

苹果系统

$ brew install

opencv3 --with-contrib --with-python3

Linux

$ sudo apt-get

install libopencv-dev python-opencv

要检查安装是否成功,请在Python Shell或命令提示符中运行以下命令:

import cv2

您应该知道的一些基本知识

在我们继续在应用程序中使用图像处理之前,重要的是要了解哪种操作属于此类,以及如何进行这些操作。这些操作以及其他操作将在以后的应用程序中使用。

对于本文,我们将使用以下图像:

注意:为了在本文中显示图像,已对图像进行了缩放,但是我们使用的原始大小约为1180x786。

您可能已经注意到图像当前是彩色的,这意味着它由三个颜色通道表示,即红色,绿色和蓝色。我们将图像转换为灰度图像,并使用下面的代码将图像分为单独的通道。

查找图像细节

在使用imread()函数加载图像后,我们可以检索有关图像的一些简单属性,例如像素数和尺寸: print("Image

Properties")

print("- Number of Pixels: " + str(img.size))

print("- Shape/Dimensions: " + str(img.shape))

输出:

Image Properties

- Number of Pixels: 2782440

- Shape/Dimensions: (1180, 786, 3)

将图像分成单独的通道

现在,我们将使用OpenCV将图像分为红色,绿色和蓝色分量,显示它们:

cv2_imshow(red)

# 显示红色通道

cv2_imshow(blue) #显示蓝色通道

cv2_imshow(green) #显示绿色通道

cv2_imshow(img_gs) # 显示灰色版本

为简便起见,我们只显示灰度图像。

灰度图像:

图像阈值

阈值的概念非常简单。如上面在图像表示中所讨论的,像素值可以是0到255之间的任何值。假设我们希望将图像转换为二进制图像,即为像素分配0或1的值。为此,我们可以执行阈值化。例如,如果阈值(T)值为125,则所有值大于125的像素将被分配值为1,所有值小于或等于该值的像素将被分配值为0。通过代码获得更好的理解。

用于阈值的图像:

import cv2

cv2_imshow(threshold)

如您所见,在生成的图像中,已经建立了两个区域,即黑色区域(像素值0)和白色区域(像素值1)。事实证明,我们设置的阈值正好在图像的中间,这就是为什么在此处划分黑白值的原因。

应用领域

#1:去除图像中的噪点

既然您已经基本了解了什么是图像处理及其用途,那么让我们继续学习它的一些特定应用程序。

在大多数情况下,我们收集的原始数据中有噪点,即使图像难以感知的不良特征。尽管这些图像可以直接用于特征提取,但是算法的准确性会受到很大影响。这就是为什么在将图像处理传递给算法之前对其进行图像处理以获得更好的准确性的原因。

噪声有很多不同的类型,例如高斯噪声,胡椒噪声等。我们可以通过应用滤镜来去除图像中的噪声,或者将噪声降到最低,或者至少将其影响降到最低。滤波器也有很多选择,每个都有不同的强度,因此对于特定类型的噪声来说是最佳选择。

为了正确理解这一点,我们将在上面考虑过的玫瑰图像的灰度版本中添加“盐和胡椒”噪声,然后尝试使用不同的滤镜从嘈杂的图像中去除该噪声,然后看看哪个是最好的-适合那种类型。

import numpy as np

cv2.imwrite('sp_05.jpg', sp_05)

好吧,我们在玫瑰图像中添加了噪点,现在看起来是这样:

嘈杂的图像:

现在让我们在其上应用不同的滤波器,并记下我们的观察结果,即每个滤波器降低噪声的程度。

带有锐化内核的算术滤波器

# 对噪音图像进行滤波

sharpened_img = cv2.filter2D(sp_05, -1, kernel_sharpening)

cv2_imshow(sharpened_img)

通过对带有噪声的图像应用算术滤波器,生成的图像如下所示。与原始灰度图像进行比较后,我们可以看到它使图像亮度过高,也无法突出玫瑰上的亮点。因此,可以得出结论,算术滤波器无法去除噪声。

算术滤波器输出:

中点滤波器

print("\n\n---Effects

on S&P Noise Image with Probability 0.5---\n\n")

midpoint(sp_05)

将中点滤镜应用到噪声的图像上的结果图像如下所示。与原始灰度图像进行比较后,我们可以看到,就像上面的核方法一样,图像亮度过高。但是,它可以突出玫瑰上的亮点。因此,可以说它是比算术滤波器更好的选择,但仍然不能完全恢复原始图像。

谐谐波均值滤波器

注意:可以在网上轻松找到这些过滤器的实现,并且它们的工作原理超出了本教程的范围。我们将从抽象/更高的层次来研究应用程序。

\

print("\n\n--- Effects on S&P Noise Image

with Probability 0.5 ---\n\n")

cv2_imshow(contraharmonic_mean(sp_05, (3,3), 0.5))

下面显示了在噪声下对图像应用Contraharmonic Mean Filter 所得到的图像。与原始灰度图像进行比较后,我们可以看到它已复制了几乎与原始图像完全相同的图像。其强度/亮度级别相同,并且也突出了玫瑰上的亮点。因此,我们可以得出结论,对谐波均值滤波器在处理盐和胡椒噪声方面非常有效。

既然我们已经找到了从嘈杂的图像中恢复原始图像的最佳过滤器,那么我们可以继续下一个应用程序了。

2:使用Canny Edge Detector进行边缘检测

到目前为止,我们一直在使用的玫瑰图像具有恒定的背景,即黑色,因此,对于该应用程序,我们将使用不同的图像以更好地显示算法的功能。原因是如果背景恒定,则边缘检测任务将变得非常简单,我们不希望这样做。

我们在本教程的前面讨论了cat分类器,让我们向前看这个示例,看看图像处理如何在其中发挥不可或缺的作用。

在分类算法中,首先会扫描图像中的“对象”,即,当您输入图像时,算法会在该图像中找到所有对象,然后将它们与您要查找的对象的特征进行比较。如果是猫分类器,它将对图像中找到的所有对象与猫图像的特征进行比较,如果找到匹配项,它将告诉我们输入图像包含猫。

由于我们以cat分类器为例,因此公平地使用cat图像是公平的。下面是我们将使用的图像:

用于边缘检测的图像:

import cv2

import numpy as np

from matplotlib import pyplot as plt

#显示两个图片

plt.show()

边缘检测输出:

如您所见,图像中包含对象的部分(在这种情况下是猫)已通过边缘检测点到/分开了。现在您必须要知道,什么是Canny

Edge Detector,它是如何实现的?现在让我们讨论一下。

要理解上述内容,需要讨论三个关键步骤。首先,它以与我们之前讨论的相似方式对图像执行降噪。其次,它在每个像素处使用一阶导数来查找边缘。其背后的逻辑是存在边缘的点处,强度会突然变化,这会导致一阶导数的值出现尖峰,从而使该像素成为“边缘像素”。

最后,它执行磁滞门限;上面我们说过,边上的一阶导数的值有一个峰值,但是我们没有说明峰值需要多高才能将其分类为边缘-这称为阈值!

在本教程的前面,我们讨论了简单的阈值化。磁滞阈值是对此的改进,它使用两个阈值而不是一个。其背后的原因是,如果阈值太高,我们可能会错过一些实际边缘(真负值),而如果阈值太低,我们会得到很多归类为实际上不是边缘的边缘(假正值)的点。)。将一个阈值设置为高,将一个阈值设置为低。所有高于“高阈值”的点都被标识为边缘,然后评估所有高于低阈值但低于高阈值的点;被标识为边的点附近或与之相邻的点也被标识为边,其余部分被丢弃。

这些是Canny Edge Detector算法用于识别图像边缘的基本概念/方法。

结论

在本文中,我们学习了如何在Windows,MacOS和Linux等不同平台上安装OpenCV(用于Python图像处理的最流行的库),以及如何验证安装是否成功。

我们继续讨论了什么是图像处理及其在机器学习的计算机视觉领域中的用途。我们讨论了一些常见的噪声类型,以及如何在应用程序中使用图像之前使用不同的滤镜将其从图像中去除。

此外,我们了解了图像处理如何在诸如“对象检测”或“分类”之类的高端应用中发挥不可或缺的作用。

使用opencv和python进行智能图像处理_使用OpenCV在Python中进行图像处理相关推荐

  1. python实现流媒体传输_基于OpenCV的网络实时视频流传输的实现

    很多小伙伴都不会在家里或者办公室安装网络摄像头或监视摄像头.但是有时,大家又希望能够随时随地观看视频直播. 大多数人会选择使用IP摄像机(Internet协议摄像机)而不是CCTV(闭路电视),因为它 ...

  2. 基于python的智能家居_基于Python的智能家居自动化测试脚本设计及实现

    投稿网址 http:www.VideoE.cn|<电视技术>第39 卷第5 期(总第458 期) 117 [本文献信息]沈杰,潘科,刘昕,等. 基于 Python 的智能家居自动化测试 ...

  3. python人脸识别理论_使用OpenCV和Python进行人脸识别

    介绍 人脸识别是什么?或识别是什么?当你看到一个苹果时,你的大脑会立刻告诉你这是一个苹果.在这个过程中,你的大脑告诉你这是一个苹果水果,用简单的语言来说就是识别.那么什么是人脸识别呢?我肯定你猜对了. ...

  4. python split函数 空格_最易懂的Python新手教程:从基础语法到代码详解

    导读:本文立足基础,讲解Python和PyCharm的安装,及Python最简单的语法基础和爬虫技术中所需的Python语法. 作者:罗攀 蒋仟 如需转载请联系华章科技 本文涉及的主要知识点如下: P ...

  5. python领域语言教案_第一单元 走进Python 编程世界

    (共17张PPT) 今年一场突如其来的新冠肺炎不仅使得人人带上了口罩,过了一个不一样的寒假,同时也使得我们以不一样的方式开启我们的学习. 同学们你们知道那些人容易得肺炎重症呢? 有基础病的 身体素质差 ...

  6. python微信跳一跳_[小白教程] 用Python占领微信跳一跳排行榜

    文/帅朋 微信新版 6.6.1 加入了「跳一跳」这个游戏功能,并迅速在朋友圈之间火了起来.很多人为了能够跳到更高的分数而努力的奋斗着.那么今天我就来蹭一蹭「跳一跳」的热度,给大家提供一个方法让你快速的 ...

  7. 用python给女朋友惊喜_如和用python给女朋友做个专属她的软件

    如和用python给女朋友做个专属她的软件 在学习python的路上如果觉得枯燥就可以想我一样做一些有趣的事情就不会无聊了 python是一门及其有趣的语言. 人们都喜欢记住一些重要的日子,比如说跟女 ...

  8. python交互式环境执行_如何在交互式环境中执行Python程序

    如何在交互式环境中执行Python程序 相信接触过Python的小伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同C d ...

  9. python怎么打日志_怎样调试 日志 python 代码

    展开全部 使用 pdb 进行调试 pdb 是 python 自带e5a48de588b662616964757a686964616f31333361306366的一个包,为 python 程序提供了一 ...

最新文章

  1. 当 Docker 遇到 Intellij IDEA,再次解放了生产力~
  2. ORA-28002: the password will expire within 7 days 解决方法(后面部分为拷贝,前面加上了自己遇到的问题的时候解决方案)
  3. Oracle 更新Opatch、打补丁
  4. javascript indexOf函数
  5. c语言Linux用线程创建文件,Linux环境下C语言线程创建---简单代码
  6. mysql 不完全插入_MySql insert插入操作不完全指北_MySQL
  7. 【nexus】nexus 仓库组的概念 以及相关配置 代码发布相关
  8. 史上最大,人工智能算法模型 GPT-3 问世,这意味着什么?
  9. 信号与系统考研复习例题详解_小语种日语日本文学复习考研资料加藤周一《日本文学史序说(上)》笔记和考研真题详解...
  10. HashMap,Hashtabel,ConcurrentHashMap的区别
  11. objdump选项解释
  12. HTTP权威指南—基础部分
  13. SosoApi使用手册
  14. Uphone开发心得
  15. Blast2GO使用方法详解(命令界面
  16. 一个屌丝程序猿的人生(一百二十)
  17. Python笔记五(写excel,加密模块,字典排序,常用的标准模块,操作mysql,时间模块)...
  18. 联想小新 Air 13 (Pro) 6,7代笔记本安装Win7系统
  19. 外国用户和国内用户看待浏览器的问题
  20. 信息系统集成考试中pv,ev,ac相关概念及运算

热门文章

  1. SAP 电商云 Spartacus UI 同 SAP Customer Data Cloud 集成运行时的 api
  2. 使用 Chrome 开发者工具分析内存问题
  3. SAP Spartacus NgExpressEngineDecorator 的工作原理
  4. git for windows的下载地址
  5. Angular里的style property binding的一个例子
  6. SAP Spartacus header区域布局设计
  7. build.gradle里uploadArchives标签的实现原理
  8. SAP Analytics Cloud里避免类型为个数的measure出现小数点
  9. time Interval in SAP UI5 SalesPipeline
  10. SAP ui5 control lifecycle - registration and deregistration