OpenCV 实战之图像操作与增强

2020-11-28  本文已影响0人  you的日常

完成机器视觉系统的搭建、校准并且确认其可以采集检测目标的图像后,就可以集中精力开发各种图像分析、处理以及模式识别算法。算法是机器视觉系统完成各种任务的核心。

为了设计准确性和鲁棒性都较高的算法,并提高其执行速度,一般需要事先对整幅图像或部分像素进行操作,使图像尺寸或形状更适合计算机处理。某些时候还要对图像进行算术和逻辑运算,以消除噪声或提高图像的对比度。这些前期的图像操作或运算不仅会在空间域增强图像,还能极大地提高后续算法的执行速度及其有效性。

本文主要涉及到的知识点有:

1. 实验环境的安装

Anaconda 是开发 Python 最常用的开源平台之一,已经为你安装了 Python 中最常用的工具库(NumPy、Matplotlib、SciPy、IPython 等),使用起来非常方便。

1.1 Ubuntu 下安装 Anaconda

1. 下载一个 Anaconda

我们可以从官网下载:

https://www.anaconda.com/distribution/#download-section

image.png

我们若在 Ubuntu 中下载,那么文件默认保存在 Download 文件夹下。

2. 执行脚本

我们进入下载路径 ~/Downloads 或者我们也可以进入到图形化界面的 download 文件夹。右键 Open In Terminal,然后就会打开终端,并进入当前文件夹。

然后执行脚本:

cbash Anaconda3-5.0.1-Linux-x86_64.sh 

然后就会自动安装前期你要同意一些协议,键盘输入 yes,翻阅协议使用 Enter 键。

3. 修改环境变量

进入到用户主目录,使用 gedit 对 .bashrc 进行编辑,添加系统环境变量 PATH。在文件末尾添加一行:

export PATH=/home/fange/anaconda3/bin:$PATH

刷新一下 source:

source .bashrc 

4. 测试安装 Anaconda 的安装

终端输入 python

如果显示如下,就说明你安装成功了。

1.2 利用 Anaconda 安装 pythone-opencv

1. 使用命令行 conda 搜包

我们进入 conda 的官方文档:

https://conda.io/docs/

查询一下如何搜索包,我们想搜索 OpenCV 相关的包。

在这里插入图片描述

图 5 conda 软件图

查阅文档我们得知,conda 搜索 OpenCV 相关包的指令是:

conda search opencv 

在这里插入图片描述

我们可以看到 conda 支持的一堆 OpenCV 的版本。

2. 进入 Anaconda Cloud 检索包

我们需要到 Anaconda Cloud 的 https://anaconda.org/ 上检索包。

在这里插入图片描述

这里我们选择这个来自 conda-forge Channel 的 OpenCV 的包,可以看到它支持的最新的 OpenCV 的版本号是 3.3.0。

在这里插入图片描述

我们点进第一个 opencv 4.11:

在这里插入图片描述

3. 添加 channel

接下来进入到 conda-forge 的官网上,发现,如果我们想用 conda 安装它们打的包,就需要另外添加一个 channel:

conda config --add channels conda-forge

否则 conda 检索不到这个包。

在这里插入图片描述

4. 安装 opencv-python

接下来我们就安装 conda-forge 这个 channel 下的 opencv3 的包。

conda install -c conda-forge opencv=3.3.0 

其中 -c 代表 channels。

2. 灰度分析与变换

图像灰度分析是图像分析中最基本的内容,它使用各种图像灰度分析工具,提取图像或 ROI 区域内的灰度特征信息。基于对图像灰度的分析测量,可以实现最基本的机器视觉检测系统,如目标存在性检测系统等。

2.1 直方图介绍

直方图(histogram)是最基本的图像灰度分析工具。使用它不仅可以判断图像中是否包含可从背景中分割出的区域、图像的饱和度和对比度是否适合检测任务,还能确定应该如何对图像采集系统进行调整以获得较高质量的图像。

图像的直方图包含了丰富的图像信息,描述了图像的灰度级内容,反映了图像的灰度分布情况。图像的灰度直方图以图表的方式显示了图像中每个灰度级与其所对应像素数量的关系。图表的横坐标为灰度级,纵坐标是各个灰度级在图像中出现的频率。直方图是图像最基本的统计特征,其中像素数量可被看作灰度级的函数。从概率论的角度来看,灰度出现的频率可被看作其出现的概率,这样直方图就对应于概率密度函数(Probability Density Function,PDF),而概率分布函数就是直方图的累计和,即概率密度函数的积分。

要深刻理解直方图我们可以使用 Ubuntu 上的 Shotwell viewer 软件中 adjust 的可以先直观的的查看图片的直方图并可以调试相关参数。

在这里插入图片描述

我们可以调节这六个参数去观察直方图的变化去理解直方图的意义,例如我将亮度调节到最低此时直方图末尾将被抑制下去。

在这里插入图片描述

2.2 直方图绘制

OpenCV 提供了函数 cv2.calcHist() 用来计算图像的统计直方图,该函数能统计各个灰度级的像素点个数。利用 matplotlib.pyplot 模块中的 plot() 函数,可以将函数 cv2.calcHist() 的统计结果绘制成直方图。

函数原型:

cv2.calcHist(images, channels, mask, histSize, ranges, accumulate) 

上一篇 下一篇

猜你喜欢

热点阅读