浅谈OpenCV

一、OpenCV是什么:

浅谈OpenCV

(OpenCV标志,可见其标志由红绿蓝三原色及其名称构成)

OpenCV 是一个基于Apache2.0 许可(开源)发行的跨平台计算机视觉和机器学习软件库,它轻量级而且高效,实现了图像处理和计算机视觉方面的很多通用算法。是当前主流视觉函数库中性能较优的。与计算机视觉关系密切,且可以应用于人脸识别、图片分割、人机互动等方面,应用较为广泛。

二、OpenCV 工作原理浅析:

在OpenCV中,图像即为矩阵,在读取图像的像素时,灰度图像直接返回灰度值,彩色图像则返回B、G、R三个分量(分别与三原色的蓝、绿、红相对应)。

OpenCV读取图像是B、G、R存储显示,需要转换为R、G、B再进行图像处理。1个彩色图像,可以分解为3个灰度图像;3个灰度图像合起来是一个彩色图像。

对于灰度图来说,图像很白,说明对应的像素值大。

浅谈OpenCV

(图为R、G、B三通道示意图)

修改图像的像素值:

图像即为像素点构成的矩阵,所以可以通过矩阵的运算来实现图像处理。修改图像的像素值时,如果是灰度图像则直接赋值新像素,彩色图像需要依次给R、G、B三个通道赋值。

三、利用OpenCV处理图像的实例:

我们以一张图片为例,实现一个简单的图片处理:阈值分割

浅谈OpenCV

(待处理的原图,命名为”road”,我们将通过OpenCV以及简短的代码来实现阈值分割)

示例代码如下:

import cv2

import numpy as np

from matplotlib import pyplot as plt

img = cv2.imread(‘road.jpg’, cv2.IMREAD_GRAYSCALE)

img = np.where(img>100,255,0)

img = img.astype(np.uint8)

plt.imshow(img)

plt.show()

解析:

阈值分割其实就是二值化处理,首先我们来了解一下二值化后的图片特征:在灰度化的图像中灰度值的范围为0~255,在二值化后的图像中的灰度值范围是0或者255。可见二值化后的图片只有两个灰度值,而阈值分割就是决定哪些像素的灰度值更改为0,哪些更改为255,即指定一个阈值,如果图像中某个像素的灰度值大于该阈值,则将该像素的灰度值置为255,否则将其灰度值置为0。

下面我们来对上面的代码中的模块和函数进行解释:

matplotlib.pyplot :matplotlib.pyplot是一个有命令风格的函数集合,它看起来和MATLAB很相似。每一个pyplot函数都使一副图像做出些许改变,例如创建一幅图,在图中创建一个绘图区域,在绘图区域中添加一条线等等。在matplotlib.pyplot中,各种状态通过函数调用保存起来,以便于可以随时跟踪像当前图像和绘图区域这样的东西。

np.where():可根据筛选条件对数据进行处理,可返回n维数组。

astype()函数:可用于转化dateframe某一列的数据类型。

【注:uint8:一种矩阵类型,是专门用于存储各种图像的(包括RGB,灰度图像等),范围是从0–255,正是因为其上限是255,所以这种类型在操作的时候会出现某些灰度值乘2之后变为0的现象,可以改变为float类型,来避免这种情况,使得色阶更细致。】

本实例中使用astype()函数,将经过np.where处理的img 图像转化为uint8类型,以便调用.imshow()函数

imshow()函数:用于实现热图绘制

分割结果:

浅谈OpenCV

作者水平有限,不足之处颇多,敬请谅解。

Original: https://blog.csdn.net/m0_63395114/article/details/122405172
Author: m0_63395114
Title: 浅谈OpenCV

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/645611/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球