OpenCV-Python系列四:图像分割(2)--梯度

Python011

OpenCV-Python系列四:图像分割(2)--梯度,第1张

上一期提到的图像阈值处理,不仅可以实现获取你想要的目标区域(作为mask使用),还可以帮你获取图像的边缘信息,那关于图像边缘,本期将从另外的角度来处理。

对边缘信息与背景差异较大的场景,你也可以使用threshold分割,不过若阈值不好选取,Laplacian梯度算子就不失为一直尝试方案,而且上网看看,关于Laplacian算子还可以用来判断图像的模糊程度,这个在相机的自动对焦当中,是否可以尝试判断下?

不过处理的效果并不理想,图像低灰阶部分边缘信息丢失严重。

对于sobel,laplacian算子我们可以使用cv2.filter2D()来实现,配置相应的核模板即可,如实现提取水平方向边缘信息:

你可以依据实际的应用需求来配置提取边缘的角度信息,这里以45度角(垂直向下逆时针旋转45度)为例:

对此,你可以采用下面的方式来解决:

学习Python库,首先要知道Python库有哪些功能与作用,再了解如何去使用,掌握使用语法,然后再实践,多多使用就可以掌握了,以下是十大比较受欢迎的机器学习库:

1. Pipenv

Pipenv 是 Kenneth Reitz 的业余项目,旨在将其他软件包(例如 npm 和 yarn)整合到 Python 里。它不需要安装 virtualenv, virtualenvwrapper,不用管理 requirements.txt 文件,并且不用确保依赖版本的可复现性。通过 Pipenv,你可以在 Pipfile 中指定依赖项。该工具可生成一个 Pipfile.lock 文件,使你的构建更具确定性,避免产生难以查找的 Bug。

2.PyTorch

PyTorch是Facebook深度学习框架,源于 Torch 框架,同时改善了 Torch 框架,基于ython 语言,由于实现了动态计算图范式, PyTorch 已经成为众多研究人员的首选框架之一,可以计算梯度,而且非常快,可扩展性强。

3. Caffe2

Caffe2 支持分布式训练、部署(即使是在移动平台上),新的 CPU 和支持 CUDA 的硬件。PyTorch 可能更适合做研究,而 Caffe2 更加适合大规模部署,就像在 Facebook 上看到的那样。另外,你可以在 PyTorch 里构建并训练模型,同时用 Caffe2 部署。

4. Pendulum

Pendulum 的优势之一在于,它是 Python 标准 datetime 替代品,因此你可以轻松地将其与现有的代码集成,并且在你需要的时候才使用它的功能。Pendulum 的作者特别注意时间分区的处理,默认在每个实例中时间分区是可用的,并且以 UTC 计时。你也可以获得扩展 timedelta 来简化 datetime 的计算。

5. Dash

Dash 是一个可构建 Web 应用,尤其是数据可视化 Web 应用的纯 Python 开源库。它建立在 Flask、Plotly 和 React 之上,并提供这几个框架的函数抽象接口,从而开发者不必学习这些框架,高效开发。这些应用程序可在浏览器和移动设备中使用。

6. PyFlux

PyFlux 是专门针对时间序列开发的 Python 开源库。时间序列研究是统计学和经济学的子领域,其目的是用于描述时间序列的行为,同时也预测时序未来的行为状态。

7. Fire

Fire 是一个开源库,可以为任何 Python 项目自动生成一个命令行界面。你几乎不需要编写任何代码或者文档,你只需要调用一个 Fire 方法并把它传递给你想要的命令行界面:一个函数、一个对象、一个类、一个库,甚至不传递任何参数。

8. imbalanced-learn

imbalanced-learn 是一个 Python 库,它提供了相关的技术来解决数据不平衡的问题。另外,它和 scikit-learn 兼容,并且是 scikit-learn-contrib 项目的一部分,非常有用。

9. FlashText

FlashText 证明了算法和数据结构设计的重要性,即使对于简单的问题,更好的算法也能够轻松超越在快 CPU 上运行的朴素实现。

10. Luminoth

Luminoth 是一个用 TensorFlow 和 Sonnet 构建的开源的计算机视觉 Python 工具包。它可直接支持物体检测,背后支持的模型是 Faster R-CNN。

Python作为一种功能强大的编程语言,因其简单易学而受到很多开发者的青睐。那么,Python 的应用领域有哪些呢?概括起来,Python的应用领域主要有如下几个,这也是学完python将要从事的相关工作。

1、Web应用开发:

Python经常被用于 Web 开发。例如,通过 mod_wsgi 模块,Apache 可以运行用 Python 编写的 Web 程序。Python 定义了 WSGI 标准应用接口来协调 HTTP 服务器与基于 Python 的 Web 程序之间的通信。

不仅如此,一些 Web 框架(如 Django、TurboGears、web2py 等等)可以让程序员轻松地开发和管理复杂的Web程序。

举个最直观的例子,全球最大的搜索引擎 Google,在其网络搜索系统中就广泛使用 Python 语言。另外,我们经常访问的集电影、读书、音乐于一体的豆瓣网,也是使用 Python 实现的。

2、操作系统管理、自动化运维开发

很多操作系统中,Python 是标准的系统组件,大多数 Linux 发行版以及 NetBSD、OpenBSD 和 Mac OS X 都集成了 Python,可以在终端下直接运行 Python。

有一些 Linux 发行版的安装器使用 Python 语言编写,例如 Ubuntu 的 Ubiquity 安装器、Red Hat Linux 和 Fedora 的 Anaconda 安装器等等。

另外,Python 标准库中包含了多个可用来调用操作系统功能的库。例如,通过 pywin32 这个软件包,我们能访问 Windows 的 COM 服务以及其他 Windows API;使用 IronPython,我们能够直接调用 .Net Framework。

通常情况下,Python 编写的系统管理脚本,无论是可读性,还是性能、代码重用度以及扩展性方面,都优于普通的 shell 脚本。

3、游戏开发

很多游戏使用 C++ 编写图形显示等高性能模块,而使用 Python 或 Lua 编写游戏的逻辑。和 Python 相比,Lua 的功能更简单,体积更小;而 Python 则支持更多的特性和数据类型。

比如说,国际上指明的游戏 Sid Meier's Civilization,就是使用 Python 实现的。

4、编写服务器软件

Python 对于各种网络协议的支持很完善,所以经常被用于编写服务器软件以及网络爬虫。

比如说,Python 的第三方库 Twisted,它支持异步网络编程和多数标准的网络协议(包含客户端和服务器端),并且提供了多种工具,因此被广泛用于编写高性能的服务器软件。

5、科学计算

NumPy、SciPy、Matplotlib 可以让 Python 程序员编写科学计算程序。

以上都只是 Python 应用领域的冰山一角,总的来说,Python 语言不仅可以应用到网络编程、游戏开发等领域,还可以在图形图像处理、只能机器人、爬取数据、自动化运维等多方面展露头角,为开发者提供简约、优雅的编程体验。

其实python的相关工作远不止这些,生活中的各行各业都有python的身影,所以,学Python,是明智的选择!